【问题标题】:Creating new columns in data.table [duplicate]在 data.table 中创建新列 [重复]
【发布时间】:2016-08-30 16:12:10
【问题描述】:

我在 R 的 data.table 中有几列(字面意思)名为 A1、A2、A3、... A50。不幸的是,我的表中的列没有按字母顺序排列。

我想创建一个名为 sumA 的新列,其中将包含 A1 + A2 + ... + A50。

有什么简单(而且不乏味)的方法?

【问题讨论】:

  • 你可以使用dt[, sumA := Reduce("+", .SD)]假设列是A1:A50
  • 如果我不想包含在 sumA 中的其他列 B1、B2、...B50 怎么办?
  • 我用那个案例发布了一个解决方案。

标签: r data.table


【解决方案1】:

这是Reduce+ 的一个选项

library(data.table)
dt[, sumA := Reduce("+", .SD)]

如果数据集中还有其他列,即“A1:A50”以外的列,请使用.SDcols 指定要选择的列

dt[, sumA := Reduce("+", .SD), .SDcols = paste0("A", 1:50)]

或者如@Arun所说,如果列是有序的,那么:可以用来选择列

dt[, sumA := Reduce("+", .SD), .SDcols = A1:A50]

【讨论】:

  • 对于交互使用,您还可以指定startcol:endcol.. 即.SDcols=A1:A50(假设它们是开始和结束列)。
  • 谢谢!这很完美。如果有新手想知道 Reduce 在 R 中做了什么,请看这里:stackoverflow.com/questions/28545688/…
  • @wwl 这种方法需要注意的一点是缺失值的处理。 sum 函数有一个na.rm 选项,而+ 没有(所以你不能“忽略”NAs)。链接的问题显示了一种解决方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-03
  • 1970-01-01
相关资源
最近更新 更多