【问题标题】:Compare big data frame with small and add new column (big data) with result [closed]将大数据框与小数据框进行比较,并在结果中添加新列(大数据)[关闭]
【发布时间】:2013-09-08 12:19:22
【问题描述】:

我们有“大数据框”和“小数据框”。 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”。

【问题讨论】:

  • 请向我们展示您的尝试。我想你有searchedSO
  • 嗯...我真的不知道,为什么我得到“3减”... Henrik,我不知道该怎么做,我也搜索过。
  • 因为你很不清楚。使用 set.seed 并编辑您的问题。
  • 如果您“不知道”如何“比较 df1$var1 和 df2$var2”,我强烈建议您阅读一些介绍性内容,例如 thisthisthis.
  • 如果英语有问题,请确保您的示例清晰、可重复,并充分描述您想要的内容。

标签: r compare dataframe


【解决方案1】:

你当然可以改进这个问题(还要注意我使用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

【讨论】:

  • Tyler Rinker,谢谢你的建议,但我知道函数“合并”,可能你不理解我......我不想在新数据框“var1 K”和总和“var2通过 df1 和 df"2。我只想通过 var1 检查/比较 df1 和 df2。 R 必须只检查 var1 表示 ID 并构建新的列名“比较”。现在,你明白我的问题了吗??
  • @Blazej:你的问题不清楚。但这可能会有所帮助(如果我了解您的 cmets):df1[df1$var1 %in% df2$var1,]
  • @Matrics 我认为这正是 Blazej 所追求的。是 sum 这个词的使用让我很反感。所以df1$Compare &lt;- as.numeric(df1$var1 %in% df2$var1) 应该给你你想要的。
  • Thx Metrics 和 Tyler Rinker。这正是我想要的:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-29
相关资源
最近更新 更多