【问题标题】:merge multiple dynamic and static variables R合并多个动态和静态变量 R
【发布时间】:2018-09-12 00:43:40
【问题描述】:

我正在尝试合并/加入 R 中的数据,但遇到了问题。

我需要从每个数据集中指定多个变量,然后从数据集 2 中指定一个具有静态值的变量。

有点像

DF1 <- data.frame(ID=c('1','2','3','4'),
            Date=c('1 Apr','1 Apr','1 Apr','1 Apr'),
            Sale=c('1000','1000','1000','1000'))
DF2 <- data.frame(ID=c('1','1','2','3','4'),
            Date=c('1 Apr','1 Apr','1 Apr','1 Apr','1 Apr'),
            Sale=c('1000','1000','1000','1000','1000'),
            Key=c('P','S','P','P','P'))


        DF1
ID  |  Date  |  Sale  | 
-----------------------
1     1 Apr    1000
2     1 Apr    1000
3     1 Apr    1000
4     1 Apr    1000

        DF2
ID  |  Date  |  Sale  |  Key  |
-------------------------------
1     1 Apr    1000       P
1     1 Apr    1000       S
2     1 Apr    1000       P
3     1 Apr    1000       P
4     1 Apr    1000       P

我需要加入 DF1 和 DF2 中具有相同名称的三个变量,其中 Key == P 来自 DF2。我熟悉 merge 和 left_join 的语法,但如果我尝试指定 DF2 中的键变量需要 == 静态值,而不是必须与 DF1 中的某些内容匹配,我无法让它们工作。

类似:

DF3 <- left_join(DF1, DF2, c("ID1.x" = "ID.y", 
"Date.x" = "Date.y", "Sale.x" = "Sale.y", DF2$Key == "P"), 
na.matches = "never")

我知道这行不通,但希望它能提供一些关于我想要做什么的想法。一个变量是静态的,在 DF2 中充当过滤器。

如果有人问,不,我不能简单地删除 Key != P 的所有行。

非常感谢任何帮助。

【问题讨论】:

    标签: r merge left-join


    【解决方案1】:

    只需merge(DF1, subset(DF2, Key != "P"))。您不必删除行,只需在合并期间删除子集。只需过滤而不是按静态值合并。

    【讨论】:

    • 我遇到了净空/内存分配问题……数据帧中还有许多其他变量,每个变量都有 10,000 多行。我需要能够指定 3-4 个变量的列表以加入 w 个公共值,然后另外,只在 DF2 中查找 Key == P 的行。
    • 如果您没有足够的 RAM 来处理 R 中的数据,您可以考虑将数据存储在数据库中并在数据库中查询您需要的数据。基本 R 中没有函数可以执行这种非常特定的、不常见的连接类型。您确定您的列上有 1-1 匹配吗? 10,000 行看起来并不多。
    猜你喜欢
    • 2014-02-03
    • 1970-01-01
    • 2016-01-17
    • 2010-11-08
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    相关资源
    最近更新 更多