R,data.table : How to assign values of some columns based on the names of other columns, 哪些存储在字符向量中?

标签 r data.table

我有以下数据表:

dt=data.table(a=seq(1,3),b=letters[seq(1,3)],
          c=seq(4,6),d=letters[seq(4,6)])
dt
   a b c d
1: 1 a 4 d
2: 2 b 5 e
3: 3 c 6 f

我将某些列的名称存储在一个向量中,并将其他列的名称存储在另一个向量中:
names1=names(dt)[1:2]
names2=names(dt)[3:4]

当某些条件适用时,我需要将存储在名称 2 中的列的值分配给名称 1 的列。就像是
dt[c(2,3),names1:=names2]

dt
   a b c d
1: 1 a 4 d
2: 5 e 5 e
3: 6 f 6 f

我尝试了以下语法但没有成功:
dt[c(2,3),names1:=dt[c(2,3),names2,with=F]]

但它仍然尝试分配包含在 names2 中的字符串向量的值

最佳答案

我会做

dt[2:3, (names1) := .SD, .SDcols = names2]

或者另一种方法,感谢@DavidArenburg:
dt[c(2,3), (names1) := mget(names2)]

这个怎么运作
  • 正如@DavidArenburg 所解释的,(names1) := 中的括号确保我们查看 names1 的内容向量而不是创建一个名为 "names1" 的列.
  • 我建议通过 the first vignette for the package详情.SDcols .
  • mget根据名称查找对象并将它们放入列表中。
  • 关于R,data.table : How to assign values of some columns based on the names of other columns, 哪些存储在字符向量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36456297/

    相关文章:

    r - 插值时间序列

    r - 使用 Base R 绘制数据子集的图表

    r - 在滑动窗口中汇总满足条件的交易

    rbindlist data.tables不同维度

    R:故意创建低效循环以避免打扰其他服务器用户

    r - 从 Shiny 书签中排除所有输入

    r - 使用 .SD 和 by 的 data.table 性能

    r - 使用大于和小于列名中的符号连接 data.tables 时出现问题

    r - 使用格子在 R 中为已处理的数据创建箱线图

    r - 不要使用 data.table 自动返回按列