gpt4 book ai didi

R data.table 根据组选择一组列以获得最大值

转载 作者:行者123 更新时间:2023-12-02 20:26:00 24 4
gpt4 key购买 nike

我看到多个帖子可以满足我的要求,但有些帖子无法获得所需的结果。

我有一个包含多列的 data.table。在所有列中,我想选择几列作为其最大值,并通过组变量对它们进行汇总。

下面是我的示例数据 -

library("data.table")
set.seed(1200)

ID <- seq(1001,1100)
region <- sample(1:10,100,replace = T)
Q21 <- sample(1:5,100,replace = T)
Q22 <- sample(1:15,100,replace = T)
Q24_LOC_1 <- sample(1:8,100,replace = T)
Q24_LOC_2 <- sample(1:8,100,replace = T)
Q24_LOC_3 <- sample(1:8,100,replace = T)
Q24_LOC_4 <- sample(1:8,100,replace = T)

Q21_PAN <- sample(1:5,100,replace = T)
Q22_PAN <- sample(1:15,100,replace = T)
Q24_LOC_1_PAN <- sample(1:8,100,replace = T)
Q24_LOC_2_PAN <- sample(1:8,100,replace = T)
Q24_LOC_3_PAN <- sample(1:8,100,replace = T)
Q24_LOC_4_PAN <- sample(1:8,100,replace = T)

df1 <- as.data.table(data.frame(ID,region,Q21,Q22,Q24_LOC_1,Q24_LOC_2,Q24_LOC_3,Q24_LOC_4,Q21_PAN,Q22_PAN,Q24_LOC_1_PAN,Q24_LOC_2_PAN,Q24_LOC_3_PAN,Q24_LOC_4_PAN))

现在,对于上述数据,我想按区域选择 4 列作为其最大值。所以结果应该有 ID 变量、区域变量和这 4 个变量,共 10 行。每个区域 1 行。我尝试了下面的代码,但它创建了一列作为 mycol 并放置向量 mycol 的第四个元素的值

mycol <- paste("Q24","LOC",seq(1:4),"PAN",sep = "_")

df2 <- df1[,.(mycol = max(mycol)),by=region]

请指出我哪里出了问题以及如何实现这一目标。

最佳答案

如果我们需要获取max,按“region”分组并在.SDcols中指定“mycol”后,循环遍历Data.table的子集(.SD) 并获取 max

df1[, lapply(.SD, max), by = region, .SDcols = mycol]

如果存在仅具有 NA 值的“区域”,则 max 将在返回 Inf 时返回警告。例如,

max(c(NA, NA), na.rm = TRUE)
#[1] -Inf

Warning message: In max(c(NA, NA), na.rm = TRUE) : no non-missing arguments to max; returning -Inf

为了纠正这个问题,我们可以添加一个 if/else 条件

df1[, lapply(.SD, function(x) if(all(is.na(x))) NA_integer_
else max(x, na.rm = TRUE)), by = region, .SDcols = mycol]

如果我们还需要“ID”作为粘贴字符串

df1[, c(list(ID = toString(ID)), lapply(.SD, max)), by = region, .SDcols = mycol]

关于R data.table 根据组选择一组列以获得最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49934855/

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