R 计算data.table的列长度,列名称由第二个data.table提供

R 计算data.table的列长度,列名称由第二个data.table提供,r,nested,data.table,R,Nested,Data.table,我有一个data.table,比如test.dt,有一个名为“id”的列。列“id”的行引用第二个data.table的列标题,比如counts.dt。我想提供计数中每列的长度,以便与原始test.dt中相应的行id匹配。例如: test <- function() { library(data.table) test.dt <- data.table(id=c("a","b","c"),other=1:3) counts.dt <- data.tabl

我有一个data.table,比如test.dt,有一个名为“id”的列。列“id”的行引用第二个data.table的列标题,比如counts.dt。我想提供计数中每列的长度,以便与原始test.dt中相应的行id匹配。例如:

test <- function() {
    library(data.table)
    test.dt <- data.table(id=c("a","b","c"),other=1:3)
    counts.dt <- data.table(a=c(1,NA,NA,NA),b=c(1,1,NA,NA),c=c(1,1,1,1),d=1:4,e=1:4)

    print(counts.dt)
    test.dt<-test.dt[,count:=sum(!is.na(counts.dt[,id]))]
    print(test.dt)
}
然而,test.dt似乎不是counts.dt列中非NA元素的数量,而是test.dt的长度,导致:

   id other count
1:  a     1     3
2:  b     2     3
3:  c     3     3
我想要的是这样一张桌子:

   id other count
1:  a     1     1
2:  b     2     2
3:  c     3     4
想法

我试着用相同结果的不同求值函数使我的“求和”语句更复杂。我还没有找到这个问题的答案;如果您能提供任何帮助或重新定位到类似问题,我们将不胜感激

更新: 我的实际数据具有更长的文本字符串作为ID,使用如图所示的答案会导致以下错误:

Error in Math.factor(j) : abs not meaningful for factors
然而,我能够通过以下方式使事情进展顺利:

get.length<-function(x){return(as.character(x))}
test.dt<-test.dt[,count:= sum(!is.na(counts.dt[,get.length(id),with=FALSE]),na.rm=TRUE),by=id]
get.length试试这个:

test.dt[, count := sum(counts.dt[, id, with = F], na.rm = T), by = id]

最后,
data.table
可能会删除
with=FALSE
选项,在这种情况下,Matt的建议仍然有效:
counts.dt[[id]]

非常好!非常感谢。我必须进一步研究with和na.rm,以便将来不会忘记它们。+1我认为,未经测试,
counts.dt[,id,with=F]
部分可能只是
counts.dt[[id]]
。如果是这样的话,通过避免调用
[.data.table()
的小开销,应该会快一点。
test.dt[, count := sum(counts.dt[, id, with = F], na.rm = T), by = id]