当前位置: 首页 > 知识库问答 >
问题:

如何使用eval向data.table添加列

吕德业
2023-03-14

我有一个观察数据表和是和否的模型。为简单起见,我只假设对组。我浪费了一些分类统计数据,我想控制选择哪一个。我知道如何使用eval做到这一点并将其保存在另一个data.table中,但我想添加到现有的data.table中,因为我每个组只有一行。任何人都可以帮我吗?

首先,我为每个组创建列联表。

 DT  <- data.table::data.table(obs = rep(c("yes","no"), 5), mod = c(rep("yes",5), rep("no", 5)), groupBy = c(1,1,1,1,1,2,1,1,2,1))
categorical <- DT[, .(a = sum(obs == category[1] & mod == category[1]),
                  b = sum(obs == category[2] & mod == category[1]),
                  c = sum(obs == category[1] & mod == category[2]),
                  d = sum(obs == category[2] & mod == category[2])), by = groupBy]

然后定义统计数据

my_exprs = quote(list(
 n    =  a+b+c+d,
 s    = (a+c)/(a+b+c+d),
 r    = (a+b)/(a+b+c+d))) 

如果我使用下面几行,它会给我一个新的数据表:

statList <- c("n","s")
w = which(names(my_exprs) %in% statList)
categorical[, eval(my_exprs[c(1,w)]), by = groupBy]

如何在此示例中使用:=将结果添加到我的旧DT中,这里称为分类?!我执行以下操作并收到错误消息:

categorical[, `:=`(eval(my_exprs[c(1,w)])), by = groupBy]


Error in `[.data.table`(categorical, , `:=`(eval(my_exprs[c(1, w)])),  : 
 In `:=`(col1=val1, col2=val2, ...) form, all arguments must be named.

谢谢,

共有1个答案

江阳夏
2023-03-14

我不能复制您的示例,但是保留您的< code>my_exprs可能有效,但是定义

my_newcols = as.call(c(quote(`:=`), my_exprs))

就像阿伦的答案一样。

或者,您可以在开始时使用<code>=

my_newcols = quote(`:=`(n = a+b+c+d, s = a+c))
 类似资料:
  • 那么,如何使用PySpark向现有的DataFrame添加一个新列(基于Python vector)呢?

  • 我想将我的添加到列中,这样我就可以在加载更多项目时在这个列表视图下面添加CircularProgressIndex ator。我使用了如何在Flutter中将列表视图添加到列中的建议?因此我制作了结构列- 你能告诉我我做错了什么吗?这个构建了新的小部件,但它构建在另一个列上。也许这是错的?

  • 我最初调用了数据库,并使用了Definer中的表,在它上运行一些查询,这些查询存储在dataframe'data1'中。现在我想发送包含一个新列的'data1',并更新MySQL中的非空表exdata3。 (将来我可能没有新的列/行,但与MySQL中的相同列相比,现有列在dataframe中可能有不同的值,如果您知道我的意思的话) 在MySQL中,dataframe和表之间的区别是在datafra

  • 问题内容: 在CSS中,将鼠标悬停在元素上时,可以使用:hover伪类为其指定视图: 如何使用jquery添加或“打开”此伪类?通常在jQuery中,如果您想添加一个类,可以这样做: 我已经尝试过“ hover”,但这实际上是在元素中添加了一个名为“ hover”的类。 如果有人知道写什么,请告诉我!谢谢! 问题答案: 您不能强迫某个伪类使用jQuery来应用。伪类(尤其是动态伪类)不是这样工作的

  • 我试图使用HttpClient将“Accept Encoding”参数添加到我的HTTP头中,如“gzip,deflate”。代码如下所示。但是,我在响应中遇到以下错误,无法添加header参数。响应不包含添加的标题字段 错误:内部服务器错误