gpt4 book ai didi

r - 如何在 R 中折叠/连接两列中选定的因子水平

转载 作者:行者123 更新时间:2023-12-01 14:30:31 24 4
gpt4 key购买 nike

假设我有以下数据框:

x <-c(rep (c ("s1", "s2", "s3"),each=5 ))
y <- c(rep(c("a", "b", "c", "d", "e"), 3) )
z<-c(1:15)

x_name <- "dimensions"
y_name <- "aspects"
z_name<-"value"
df <- data.frame(x,y,z)
names(df) <- c(x_name,y_name, z_name)

如何在“维度”和“值”上将因子级别“a”、“c”、“d”合并到一个新因子“x”中,以便将值添加到新的 x 因子中等级。输出应如下所示:

enter image description here

我想使用 gsub 将 a、c、d 的名称替换为 x,然后使用aggregate 对它们的值求和。但有没有更简单的方法来做到这一点?此外,如果我有其他包含 a、c、d 的列,我不确定我的解决方案是否仍然有效。
我查看了论坛上的几个相关答案,但都没有解决这种情况。谢谢。

最佳答案

首先将 a、c 和 d 重命名为 x,然后按维度和方面求和

读取数据:

df <- data.frame(dimensions = x, aspects = y, value = z, stringsAsFactors = FALSE)

基础 R 解决方案:

# if you read the data my way the following line is unnecessary
# df$aspects <- as.character(df$aspects)
df[df$aspects %in% c("a","c","d"),]$aspects <- "x"
aggregate(value ~., df, sum)

结果:

  dimensions aspects value
1 s1 b 2
2 s2 b 7
3 s3 b 12
4 s1 e 5
5 s2 e 10
6 s3 e 15
7 s1 x 8
8 s2 x 23
9 s3 x 38

data.table解决方案

require(data.table)
DT <- setDT(df)
DT[aspects %in% c("a","c","d"), aspects := "x"]
DT[,sum(value), by=.(dimensions, aspects)]

结果

   dimensions aspects V1
1: s1 x 8
2: s1 b 2
3: s1 e 5
4: s2 x 23
5: s2 b 7
6: s2 e 10
7: s3 x 38
8: s3 b 12
9: s3 e 15

关于r - 如何在 R 中折叠/连接两列中选定的因子水平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33111466/

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