【问题标题】:Merge two data.tables to a new data.table将两个 data.table 合并到一个新的 data.table
【发布时间】:2019-04-17 07:10:39
【问题描述】:

我有两个数据表

dt.1 <- data.table(id=c("id.1", "id.2", "id.3", "id.4", "id.5"), param = c("red", "green", "blue", "blue", "red"))
dt.2 <- data.table(red = c(0.02, 0.03, 0.04, 0.02), green=c(0.01, 0.01, 0.01, 0.02), blue=c(0.01, 0.03, 0.03, 0.01))

看起来像这样

   id param
1: id.1   red
2: id.2 green
3: id.3  blue
4: id.4  blue
5: id.5   red

   red green blue
1: 0.02  0.01 0.01
2: 0.03  0.01 0.03
3: 0.04  0.01 0.03
4: 0.02  0.02 0.01

现在我想把它们组合起来,得到一个这样的表格

   id.1 id.2 id.3 id.4 id.5
1: 0.02 0.01 0.01 0.01 0.02
2: 0.03 0.01 0.03 0.03 0.03
3: 0.04 0.01 0.03 0.03 0.04
4: 0.02 0.02 0.01 0.01 0.02

我该怎么做?

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    尝试使用以下代码:

    dt.3<-dt.2%>%t()%>%data.frame()
    cbind(dt.1,dt.3)%>%select(-param)%>%t()%>%as.data.frame()
    

    输出:

         V1   V2   V3   V4   V5
    id id.1 id.2 id.3 id.4 id.5
    X1 0.02 0.01 0.01 0.02 0.01
    X2 0.03 0.01 0.03 0.03 0.01
    X3 0.04 0.01 0.03 0.04 0.01
    X4 0.02 0.02 0.01 0.02 0.02
    

    如果您不想作为数据框或希望输出为矩阵,请使用as.matrix

    【讨论】:

    • 我对管道不熟悉,但我会检查一下。谢谢!
    • 你知道sql吗?类似于 sql 中的子查询...管道用于执行多个操作
    【解决方案2】:

    试试

    library(data.table)
    out <- merge(melt(dt.2, variable.name = "param"), # melt dt.2 before merging 
                 dt.1,
                 by = 'param',
                 allow.cartesian = TRUE)
    out <- dcast(out, rowid(id) ~ id, value.var = "value")[, id := NULL]
    out
    #   id.1 id.2 id.3 id.4 id.5
    #1: 0.02 0.01 0.01 0.01 0.02
    #2: 0.03 0.01 0.03 0.03 0.03
    #3: 0.04 0.01 0.03 0.03 0.04
    #4: 0.02 0.02 0.01 0.01 0.02
    

    【讨论】:

    • 我收到一条警告,上面写着:在 melt.data.table(dt.2, variable.name = "param") 中:为了与 reshape2 的熔体保持一致,id.vars 和 measure.vars 是当两者都为“NULL”时,内部猜测。所有非数字/整数/逻辑类型的列都被认为是 id.vars,在这种情况下是列 []。考虑在未来提供至少一个“id”或“measure”变量。
    • @beni 是的,我也是。但这只是一个你可以忽略的警告。来自?melt.data.table:“如果 id.vars 和 measure.vars 都缺失,则所有非数字/整数/逻辑列都被分配为 id 变量,其余为度量变量。”
    猜你喜欢
    • 2015-02-07
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 2021-06-25
    • 2021-07-29
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多