【问题标题】:Bind a data.table and a vector绑定一个 data.table 和一个向量
【发布时间】:2013-08-21 09:56:49
【问题描述】:

我有两个数据表:

require(data.table)
set.seed(11)
dt = data.table(a=c(1,2,3,2,1,3,2,3,2,1,2,3))
V = c(1/2,1/8,3/2)
names(V) = c('1','2','3')

我想绑定这两个 data.tables,以便 dt1$a 中的每个值对应(=站在同一行上)V 的值,其名称等于 dt1$a 中的值。最后,新构建的 data.table 应该有 ncol(dt1)+1 列和 nrow(dt1) 行。例如:如第 6 行,dt1$a 中出现了一个 3,V 的值,命名为 3,应该出现在新创建的 data.table 的第 6 行中。

希望这是有道理的。我希望这个操作是基本的,我很难用简单的语言来解释它!

【问题讨论】:

  • 很难用简单的话来解释 - 这就是为什么显示输出会有很大帮助!

标签: r data-binding binding bind data.table


【解决方案1】:

这个怎么样?

dt[, V := V[as.character(a)]]
    a     V
 1: 1 0.500
 2: 2 0.125
 3: 3 1.500
 4: 2 0.125
 5: 1 0.500
 6: 3 1.500
 7: 2 0.125
 8: 3 1.500
 9: 2 0.125
10: 1 0.500
11: 2 0.125
12: 3 1.500

【讨论】:

    【解决方案2】:

    不是最好的方法,但它有效:

    V <- data.table(V)
    V <- V[,a:=unique(dt[,list(a)])]
    merge(dt,V,by="a")
        a     V
     1: 1 0.500
     2: 1 0.500
     3: 1 0.500
     4: 2 0.125
     5: 2 0.125
     6: 2 0.125
     7: 2 0.125
     8: 2 0.125
     9: 3 1.500
    10: 3 1.500
    11: 3 1.500
    12: 3 1.500
    

    【讨论】:

    • 感谢您的回答。问题是我无法重新排序我的 data.table 并且我的 data.table 实际上有更多列。我宁愿为V 的值添加一列到dt 而不是将dt 添加到V
    猜你喜欢
    • 2021-12-19
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2013-01-13
    • 2022-11-11
    • 1970-01-01
    相关资源
    最近更新 更多