[英]How to compare the rows of two dataframes in R
我正在嘗試比較兩列不同的數據框以創建一個新的數據框。 如果第一個 col 的行的值小於第二個,它將向新列添加 1。 當值更大時,它會添加一個 2,依此類推。
我給你舉個例子。 我有這個 df
df1 <- data.frame(col=c(1,seq(1:9),9,10))
# col
# 1 1
# 2 1
# 3 2
# 4 3
# 5 4
# 6 5
# 7 6
# 8 7
# 9 8
# 10 9
# 11 9
# 12 10
而這個,行數較少
df2<-data.frame(col2=c(3,6,8))
# col2
# 1 3
# 2 6
# 3 8
現在,我的願望 output 將與此類似:
# col3
# 1 1
# 2 1
# 3 1
# 4 2
# 5 2
# 6 2
# 7 3
# 8 3
# 9 4
# 10 4
# 11 4
# 12 4
我知道這是一個非常基本的問題,但是如果不使用 for 循環,我將無法輕松做到這一點。 我雖然關於使用!unique()
到 select 第一個元素,看看它是否在第二%in%
元素中,但不知道如何實現它。
如果我理解正確,我認為這會起作用:
apply(df1, 1, FUN = function(x) 1 + sum(x >= df2$col2))
# [1] 1 1 1 2 2 2 3 3 4 4 4 4
我們使用apply
遍歷df1
的行,然后檢查每行中的值以查看它與df2
中的col2
的比較情況。
dplyr 替代方案:
library(dplyr)
df1 %>%
rowwise() %>% # group over each row
mutate(col3 = 1 + sum(col >= df2$col2))
col col3
<dbl> <dbl>
1 1 1
2 1 1
3 2 1
4 3 2
5 4 2
6 5 2
7 6 3
8 7 3
9 8 4
10 9 4
11 9 4
12 10 4
希望這可以幫助你
z <- rep(F,nrow(df1))
z[c(1,df2$col2+1)]<- T
df1$col3 <- cumsum(z)
這使
> df1
col col3
1 1 1
2 1 1
3 2 1
4 3 2
5 4 2
6 5 2
7 6 3
8 7 3
9 8 4
10 9 4
11 9 4
12 10 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.