【发布时间】:2014-04-16 23:36:49
【问题描述】:
我有一个数据表。我想创建一个新列,该列等于那些列中的值的函数,列名中有一个模式
library(data.table)
library(dplyr)
set.seed(1)
DT <- data.table(Client = LETTERS[1:5],
Apple_2012 = rpois(5,5), Apple_2013 = rpois(5,5), Pear_2012 = rpois(5,5),
Pear_2013 = rpois(5,5), Orange_2012 = rpois(5,5), Orange_2013 = rpois(5,5))
例如,我想
DT <- DT[ ,Fruit_2012 := Apple_2012 + Pear_2012 + Orange_2012]
但我想通过识别“2012”模式来做到这一点。像这样的:
DT <- DT[ ,Fruit_2012 := sum(names(DT)[grep("2012", names(DT))]) ]
或者
DT <- DT %.%
mutate(Fruit_2012 = sum(names(DT)[grep("2012", names(DT))]) )
但是这些方法都没有任何结果。
# Error in sum(names(DT)[grep("2012", names(DT))]) :
# invalid 'type' (character) of argument
我尝试过使用list、quote 和with=FALSE 的组合,但没有更多的运气。
【问题讨论】:
-
也许:
DT[, Fruit_2012 := rowSums(.SD), .SDcols=grep("2012$", names(DT))]? -
非常适合
sum。但想使用一个可以接受向量参数的通用函数(如max)。我应该使用apply(.SD, 1, FUN)吗?它有效,但有更惯用的解决方案吗?
标签: r regex dplyr data.table