【问题标题】:How do I subtract two data frames of unequal length如何减去两个长度不等的数据帧
【发布时间】:2014-05-21 11:53:53
【问题描述】:
x<-c(1:5)
y<-c("a","b","c","d","e")
df1<- as.data.frame(cbind(x,y))

x<-c(1:10)
y<-c("a","b","c","d","e","f","g","h","i","j")
df2<- as.data.frame(cbind(x,y))

我可以设置获取这些数据帧之间的差异

setdiffDF(df1, df2) 

我想要做的是把这个结果从 df2 拿走,所以我留下 df1 和 df2 完全匹配

谢谢

【问题讨论】:

  • 那么生成的 df2 是否应该与 df1 相同?
  • 您不能简单地将 df1 的副本作为 df2 吗?
  • 另外,你的意思是setdiff 来自base R 还是setdiffDF 是另一个包的不同功能?也许intersect(df1, df2) 对您的任务也很有趣?

标签: r dataframe


【解决方案1】:

你也可以使用 base R merge 函数

merge(df1, df2, by = "y")

或者你可以通过yx合并

merge(df1, df2, by = c("y", "x"))

如果您想保留df1 中的所有值,无论它们是否都与df2 匹配,您可以这样做

merge(df1, df2, by = c("y", "x"), all.x = TRUE)

【讨论】:

    【解决方案2】:

    您可以使用dplyr 中的intersect(不要与base::intersect 混淆)。

    > library(dplyr)
    > intersect(df1, df2)
    ##   x y
    ## 1 1 a
    ## 2 2 b
    ## 3 3 c
    ## 4 4 d
    ## 5 5 e
    

    【讨论】:

      猜你喜欢
      • 2017-04-20
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多