gpt4 book ai didi

r - 如何在R中重新组合,计算平均值并生成新的数据框?

转载 作者:行者123 更新时间:2023-12-04 10:14:41 24 4
gpt4 key购买 nike

我是 R 的大一新生。
最近我在做一个小项目。
我有一个如下所示的数据集:(抱歉,出于保密目的,我无法复制真实数据)
因为在一些县,化学品已经被测量了多次。

id county chemicalA chemicalB chemicalC
1 a 0.1 NA NA
1 a 0.3 NA NA
1 a 0.2 NA NA
1 a 0.2 NA NA
2 b 0.4 0.2 NA
2 b 0.1 NA NA
3 c 0.05 NA 0.8
4 d NA NA 0.4
4 d 0.2 NA 0.5
4 d 0.3 NA 0.6

现在我想按县计算化学品的平均值并生成一个理想的数据框,如下所示:
id county  meanA   meanB   meanC
1 a 0.2 NA NA
2 b 0.25 0.2 NA
3 c 0.05 NA 0.8
4 d 0.25 NA 0.5

我用谷歌搜索并尝试过类似 tapply 的功能, group_by ,但它们并不理想。
例如, tapply只能生成一个向量,但我想要一个带有 id 的矩阵,以便我可以将它们全部合并以生成理想的数据帧。我也尝试通过 data.frame 设置数据框首先并用计算填充它,但我无法通过 id 合并它。
有没有其他方法可以帮助我生成理想的数据框?谢谢!

最佳答案

我们可以使用 summarise_at按“id”、“county”分组后

library(dplyr)
df1 %>%
group_by(id, county) %>%
summarise_at(vars(-group_cols()), mean, na.rm = TRUE)

如果组组合的特定列只有 NA ,这将返回 NaN当我们使用 na.rm = TRUE .为了防止这种情况,我们可以有一个 if/else健康)状况
df1 %>%
group_by(id, county) %>%
summarise_at(vars(-group_cols()), ~ if(all(is.na(.)))
NA_real_ else mean(., na.rm = TRUE))

或另一个选项是 mean_来自 hablar
library(hablar)
df1 %>%
group_by(id, county) %>%
summarise_at(vars(-group_cols()), mean_)
# A tibble: 4 x 5
# Groups: id [4]
# id county chemicalA chemicalB chemicalC
# <int> <chr> <dbl> <dbl> <dbl>
#1 1 a 0.2 NA NA
#2 2 b 0.25 0.2 NA
#3 3 c 0.05 NA 0.8
#4 4 d 0.25 NA 0.5

或者如果有很多其他变量,我们可以用 summarise_if 应用于数值列
df1 %>%
group_by(id, county) %>%
summarise_if(is.numeric, mean_)

或者对于特定变量,指定列名或列名中是否有任何模式,即这里的列名以“化学”开头
df1 %>%
group_by(id, county) %>%
summarise_at(vars(starts_with('chemical')), mean_)

数据
df1 <- structure(list(id = c(1L, 1L, 1L, 1L, 2L, 2L, 3L, 4L, 4L, 4L), 
county = c("a", "a", "a", "a", "b", "b", "c", "d", "d", "d"
), chemicalA = c(0.1, 0.3, 0.2, 0.2, 0.4, 0.1, 0.05, NA,
0.2, 0.3), chemicalB = c(NA, NA, NA, NA, 0.2, NA, NA, NA,
NA, NA), chemicalC = c(NA, NA, NA, NA, NA, NA, 0.8, 0.4,
0.5, 0.6)), class = "data.frame", row.names = c(NA, -10L))

关于r - 如何在R中重新组合,计算平均值并生成新的数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61131448/

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