「id」という列を持つdata.table、たとえばtest.dtがあります。列「id」の行は、counts.dt などの 2 番目の data.table の列ヘッダーを参照します。元の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)
}
期待どおりcounts.dt:
a b c d e
1: 1 1 1 1 1
2: NA 1 1 2 2
3: NA NA 1 3 3
4: NA NA 1 4 4
ただし、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]