我们有“大数据框”和“小数据框”。 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”。
答案 0 :(得分:0)
你当然可以改进这个问题(另请注意我使用set.seed
?)。以下是使用merge
和apply
的一种方法,但我确信有更好的方法:
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