簡體   English   中英

如何比較 R 中兩個數據幀的行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM