gpt4 book ai didi

r - 如何使用 R 中的自定义函数聚合 data.frame 中的多个列?

转载 作者:行者123 更新时间:2023-12-04 09:47:14 25 4
gpt4 key购买 nike

我有一个 data.frame dt 有一些重复的键和丢失的数据,即

Name     Height     Weight   Age
Alice 180 NA 35
Bob NA 80 27
Alice NA 70 NA
Charles 170 75 NA

在这种情况下,关键是名称,我想为每一列应用一个类似的函数

f <- function(x){
x <- x[!is.na(x)]
x <- x[1]
return(x)
}

同时通过键(即“名称”列)进行聚合,从而得到结果

Name     Height     Weight   Age
Alice 180 70 35
Bob NA 80 27
Charles 170 75 NA

我试过了

dt_agg <- aggregate(. ~ Name,
data = dt,
FUN = f)

我遇到了一些错误,然后我尝试了以下方法

dt_agg_1 <- aggregate(Height ~ Name,
data = dt,
FUN = f)

dt_agg_2 <- aggregate(Weight ~ Name,
data = dt,
FUN = f)

这次成功了。

因为我有 50 列,所以第二种方法对我来说相当麻烦。有没有办法解决第一种方法?

感谢您的帮助!

最佳答案

您已经非常接近 aggregate 函数,您需要调整聚合处理 NA 的方式(从 na.omit na.pass)。我的猜测是,聚合首先删除所有带有 NA 的行,然后进行聚合,而不是在聚合迭代要聚合的列时删除 NA。由于您的示例数据框在每一行中都有一个 NA ,因此您最终会得到一个 0 行数据框(这是我在运行代码时遇到的错误)。我通过删除除一个 NA 之外的所有内容对此进行了测试,并且您的代码按原样工作。所以我们设置 na.action = na.pass 让 NA 通过。

dt_agg <- aggregate(. ~ Name,
data = dt,
FUN = f, na.action = "na.pass")

原答案

dt_agg <- aggregate(dt[, -1], 
by = list(dt$Name),
FUN = f)
dt_agg
# Group.1 Height Weight Age
# 1 Alice 180 70 35
# 2 Bob NA 80 27
# 3 Charles 170 75 NA

关于r - 如何使用 R 中的自定义函数聚合 data.frame 中的多个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46667995/

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