gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:00:06 26 4
gpt4 key购买 nike

有很多帖子讨论了在使用 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')]

这是非常乏味的。有没有更明智的方法来做到这一点?

谢谢

最佳答案

我真的建议通过 vignettes linked here .来自 Introduction to data.table vignette 的第 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 中的所有列来返回一个逻辑矩阵。到“一个”。然后使用 rowSums总结一下。

另一种使用 Reduce 的方法:
data.dt[, numberOfAs := Reduce(`+`, lapply(.SD, function(x) x == "a")), .SDcols=5:8]

关于r - 使用 data.table 计算依赖于多列的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28157675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com