[英]Looping on rows of a data.table in R
給定如下定義的數據表
set.seed(123)
ds <- data.table(x = rnorm(10), y = rnorm(10), z = rnorm(10))
推薦使用哪種方法循環遍歷data.table的行並獲取每行每一列中的某個值的向量在某個范圍(例如-0.5和0.5)之間,而避免使用for()?
並獲得某種類型的答案
for (i in 1:10) {
print(sum(-0.5 < ds[i] & ds[i] < 0.5))
}
如果我只想將其應用於vector中定義的某些特定列,例如:
cols <- c(1,3)
並得到相同類型的答案?
for (i in 1:10) {
print(sum(-0.5 < ds[i,cols,with=F] & ds[i,cols,with=F] < 0.5))
}
提前致謝。
這是一種方法:
ds[, Reduce('+', lapply(.SD, function(x) -0.5 < x & x < 0.5))]
#[1] 0 3 1 2 1 0 2 1 0 2
您可以通過.SDcols
提供所需的列:
ds[, Reduce('+', lapply(.SD, function(x) -0.5 < x & x < 0.5)), .SDcols = cols]
#[1] 0 2 0 1 1 0 1 1 0 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.