【发布时间】:2015-10-12 07:08:06
【问题描述】:
假设我有以下data.table
dt <- data.table(var = c("a", "b"), val = c(1, 2))
现在我想向dt 添加两个新列,分别命名为a 和b,其值分别为(1、2)。我可以用循环来做到这一点,但我想用 data.table 的方式来做。
结果将是这样的data.table:
dt.res <- data.table(var = c("a", "b"), val = c(1, 2), #old vars
a = c(1, NA), b = c(NA, 2)) # newly created vars
到目前为止,我想出了类似的东西
dt[, c(xx) := val, by = var]
其中xx 将是一个类似于.N 的data.table-command,它处理by-group 的值。
感谢您的帮助!
附录:for循环方式
带有 for-loop 而不是 by-argument 的 non-data.table-way 看起来像这样:
for (varname in dt$var){
dt[var == varname, c(varname) := val]
}
【问题讨论】:
-
试试
dt[, c('a', 'b') := Map('*', lapply(var, function(x) val[NA^(x!=var)]), val)] -
看大图会很高兴。你真正想做什么?
-
我正在尝试编写一个获取金融交易日期的函数,并根据这些信息构建投资组合。问题涉及计算投资组合中持有的股票数量的函数的一部分。例如,股票“a”的数量为 1,股票“b”的数量为 2。接下来的步骤是将 data.table 与另一个合并,包含价格并将值相乘以获得投资组合值.这有什么帮助吗?
-
dt[, ':='(var1=val1, var2=val2...) ]有什么问题?您需要以编程方式生成或传递名称吗? -
我不明白 "
xx将是一个类似于.N的 data.table-command,用于处理按组的值"。能给我举个例子吗?您想根据 by-argument 中的名称形成 xx 中的变量名称向量吗?请举个例子。
标签: r data.table