比较大数据帧和小数据,并添加新列(大数据)与结果

时间:2013-09-08 12:19:23

标签: r compare dataframe

我们有“大数据框”和“小数据框”。 Var1s是我的ID,Var2s是一些值。

df1 <- data.frame(row.names=1:10, var1=c("A","B","C","D","E","F","G","H","I","J"), var2=runif(10))
df2 <- data.frame(row.names=1:4, var1=c("B","D","K","A"), var2=runif(4))

我想比较两个数据帧并接收新的data.frame“DF”,它们看起来像:[head(DF)]

  var1      var2     Compare
1    A 0.7145085           1
2    B 0.9966129           1
3    C 0.5062709           0
4    D 0.4899432           1
5    E 0.6491614           0
6    F 0.8308064           0

我只想比较df1 $ var1和df2 $ var2。

此任务的目的是计算var2的总和(来自数据框df1),其中compare = 1。

我考虑逻辑功能,但这只是逐行检查......如你所见,我将全部“FALSE”。

1 个答案:

答案 0 :(得分:0)

你当然可以改进这个问题(另请注意我使用set.seed?)。以下是使用mergeapply的一种方法,但我确信有更好的方法:

set.seed(10)
df1 <- data.frame(row.names=1:10, var1=c("A","B","C","D","E","F","G","H","I","J"), var2=runif(10))
df2 <- data.frame(row.names=1:4, var1=c("B","D","K","A"), var2=runif(4))


df3 <- merge(df1, df2, by="var1", all=TRUE)
df3$Compare <- rowSums(apply(df3[, -1], 2, function(x) !is.na(x))) - 1
df3$var2 <- apply(df3[, 2:3], 1, sum, na.rm=TRUE)
df3[, c(1, 5, 4)]

##    var1       var2 Compare
## 1     A 1.10340351       1
## 2     B 0.95842417       1
## 3     C 0.42690767       0
## 4     D 1.26083983       1
## 5     E 0.08513597       0
## 6     F 0.22543662       0
## 7     G 0.27453052       0
## 8     H 0.27230507       0
## 9     I 0.61582931       0
## 10    J 0.42967153       0
## 11    K 0.11350898       0