我试图在我的data.table栏中添加列,其中的名称是动态的.我需要在添加这些列时使用by参数.例如:

test_dtb <- data.table(a = sample(1:100, 100), b = sample(1:100, 100), id = rep(1:10,10))
cn <- parse(text = "blah")
test_dtb[ , eval(cn) := mean(a), by = id]

# Error in `[.data.table`(test_dtb, , `:=`(eval(cn), mean(a)), by = id) : 
#  LHS of := must be a single column name when with=TRUE. When with=FALSE the LHS may be a vector of column names or positions.

另一次try :

cn <- "blah"
test_dtb[ , cn := mean(a), by = id, with = FALSE]
# Error in `[.data.table`(test_dtb, , `:=`(cn, mean(a)), by = id, with = FALSE) : 'with' must be TRUE when 'by' or 'keyby' is provided

Update from Matthew:

这在v1中现在起作用.8.3在R-Forge上.谢谢你的提醒

Assign multiple columns using data.table, by group

推荐答案

data.table 1.9.4开始,你可以这样做:

## A parenthesized symbol, `(cn)`, gets evaluated to "blah" before `:=` is carried out
test_dtb[, (cn) := mean(a), by = id]
head(test_dtb, 4)
#     a  b id blah
# 1: 41 19  1 54.2
# 2:  4 99  2 50.0
# 3: 49 85  3 46.7
# 4: 61  4  4 57.1

?:=分之Details:

DT[i, (colvector) := val]

[...] 现在首选[…]语法.帕伦夫妇足以阻止LHS成为一种象征;和c(colvector)一样


Original answer:

你的思路完全正确:构造一个表达式在调用[.data.table的过程中进行求值是实现这类事情的data.table种方法.再进一步,为什么不构造一个计算entire j参数的表达式(而不仅仅是它的左侧)?

像这样的事情应该可以做到:

## Your code so far
library(data.table)
test_dtb <- data.table(a=sample(1:100, 100),b=sample(1:100, 100),id=rep(1:10,10))
cn <- "blah"

## One solution
expr <- parse(text = paste0(cn, ":=mean(a)"))
test_dtb[,eval(expr), by=id]

## Checking the result
head(test_dtb, 4)
#     a  b id blah
# 1: 30 26  1 38.4
# 2: 83 82  2 47.4
# 3: 47 66  3 39.5
# 4: 87 23  4 65.2

R相关问答推荐

使用R中的小鼠()进行插补后观察次数显着变化

如何判断R中一列的值是否在所有其他列中重复?

使用gsim删除特殊词

如何在弹性表中为类别值的背景上色

R中具有gggplot 2的Likert图,具有不同的排名水平和显示百分比

在"gt"表中添加第二个"groupname_col",而不连接列值

如何从当前行上方找到符合特定条件的最接近值?

在特定Quarto(reveal.js)幻灯片上隐藏徽标

如何写一个R函数来旋转最后n分钟?

如何在Chart_Series()中更改轴值的 colored颜色 ?

当我们有多个特殊字符时,使用gsub删除名称和代码'

可以替代与NSE一起使用的‘any_of()’吗?

如何通过ggplot2添加短轴和删除长轴?

迭代到DataFrame列并获得成对的值列表(col1->;col2、col2->;col3、col3->;col4等)的正确方法.

是否有新方法来更改Facet_WRAP(Ggplot2)中条文本的文本 colored颜色 ?

从多个可选列中选取一个值到一个新列中

如何在PDF格式的kableExtra表格中显示管道字符?

如何使用字符串从重复的模式中提取多个数字?

R代码,用于在线条图下显示观测表

如何在内联代码中添加额外的空格(R Markdown)