[英]How to loop through columns in data.table in R
這個問題困擾着我整個周末。 我想基於另一列的組來計算一列中的“ 1”的數量。 我想遍歷許多列,這里給出的示例只是一個簡單的例子。 我認為DT1和DT2應該給我相同的結果,但顯然DT1不起作用。 誰能告訴我這是什么原因? 謝謝!
DT <- data.table(Sample.name = c("A","B","C","A","A","B"),
Class1 = c(1, 0, 1, 0, 1, 0),
Class2 = c(1, 1, 1, 0, 1, 1))
round.test <- colnames(DT)
round.test <- round.test[c(2, 3)]
round.test <- noquote(round.test)
DT1 <- DT[, sum((round.test[1]) == 1),
by = Sample.name]
DT2 <- DT[, sum(Class1 == 1),
by = Sample.name]
從列名的字符向量開始,可以使用get
列值:
round.test <- colnames(DT)
round.test <- round.test[c(2, 3)]
DT[, sum(get(round.test[1]) == 1), .(Sample.name)]
# Sample.name V1
#1: A 2
#2: B 0
#3: C 1
DT[, lapply(round.test, function(col) sum(get(col) == 1)), .(Sample.name)]
# Sample.name V1 V2
#1: A 2 2
#2: B 0 2
#3: C 1 1
或者,您可以使用.SDcols
傳入列名稱,並通過.SD
訪問列:
DT[, lapply(.SD, function(col) sum(col == 1)), by=.(Sample.name), .SDcols=round.test]
# Sample.name Class1 Class2
#1: A 2 2
#2: B 0 2
#3: C 1 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.