【问题标题】:Merge for multiple columns and rows合并多列和多行
【发布时间】:2015-07-23 11:54:52
【问题描述】:

给定以下数据表:

> d1 <- data.table(letter=c("A", "B", "A", "B"), V1=c(0,0,0,0),V2=c(0,0,0,0))
> d2 <- data.table(letter=c("A", "B"), value=c(1,2))
> d1
   letter V1 V2
1:      A  0  0
2:      B  0  0
3:      A  0  0
4:      B  0  0
> d2
   letter value
1:      A     1
2:      B     2

我试图使用 d2 中的值填充 d1 中的 V1 和 V2 列,以便:

> d12
   letter V1 V2
1:      A  1  1
2:      B  2  2
3:      A  1  1
4:      B  2  2

我假设我必须以某种方式使用“合并”功能,但我没有管理。

关于如何实现这一点的任何建议?

非常感谢!

【问题讨论】:

    标签: r data.table


    【解决方案1】:
    setkey(d1, letter)
    setkey(d2, letter)
    d1[d2, c('V1','V2'):=value]
    # d1 holds the updated dt
    

    d1[d2] 将 d1 合并到 d2; c('V1', 'V2'):=valuevalue 列分配给 V1 和 V2。 d1 中包含 d2 中没有的字母的行保持原样。

    【讨论】:

    • 感谢您的回答。我看到结果按字母顺序重新排列了字母。我怎样才能避免这种情况?
    • 这是setkey的行为,任何合并都会先按key排序。如果您想稍后恢复订单,则必须先存储它,然后再恢复它,例如d1[, order:=1:nrow(order)]setkey 之前;然后在最后像setkey(d1, order) 这样在最后订购它。我认为data.table 鼓励您不要过度依赖行顺序(除非您有一些列对该顺序进行编码,然后它将形成表格的自然键)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多