繁体   English   中英

使用data.table计算依赖于许多列的函数

[英]Using data.table to calculate a function which depends on many columns

有许多帖子讨论在使用data.table时在多列上应用函数。 但是我需要计算一个依赖于许多列的函数。 举个例子:

# Create a data table with 26 columns.  Variable names are var1, ..., var 26
data.mat = matrix(sample(letters, 26*26, replace=TRUE),ncol=26)
colnames(data.mat) = paste("var",1:26,sep="")
data.dt <- data.table(data.mat)

现在,假设我想计算第5,6,7和8列中'a'的数量。我看不到如何使用SDcols执行此操作并最终执行:

data.dt[,numberOfAs := (var5=='a')+(var6=='a')+(var7=='a')+(var7=='a')]

这很乏味。 有更合理的方法吗?

谢谢

我真的建议你看看这里链接小插曲 data.table插图简介中的第2e节解释了.SD.SDcols

.SD只是一个包含当前组数据的data.table。 并且.SDcols告诉列.SD应该有。 一种有用的方法是使用print来查看内容。

# .SD contains cols 5:8
data.dt[, print(.SD), .SDcols=5:8]

由于没有by这里, .SD包含的所有行data.dt ,对应于指定的列.SDcols


一旦你理解了这一点,任务就会减少你对基础R的了解。 您可以通过多种方式实现此目的。

data.dt[, numberOfAs := rowSums(.SD == "a"), .SDcols=5:8]

我们通过将.SD所有列与“a”进行比较来返回逻辑矩阵。 然后使用rowSums对它们进行总结。

使用Reduce另一种方法:

data.dt[, numberOfAs := Reduce(`+`, lapply(.SD, function(x) x == "a")), .SDcols=5:8]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM