gpt4 book ai didi

r - 通过分组汇总_所有行并定义应保留哪个值

转载 作者:行者123 更新时间:2023-12-04 07:39:30 25 4
gpt4 key购买 nike

我有一个数据框,其中合并了多个数据源。这将创建具有相同 ID 的行。现在我想定义应该保留哪一行的哪些值。
到目前为止,我一直在使用 dplyr 和 group_by 并汇总所有以保留第一个值(如果它不是 NA)。
下面是一个例子:

# function f for summarizing
f <- function(x) {
x <- na.omit(x)
if (length(x) > 0) first(x) else NA
}
# test data
test <- data.frame(id = c(1,2,1,2), value1 = c("a",NA,"b","c"), value2 = c(0:4))

id value1 value2
1 a 0
2 <NA> 1
1 b 2
2 c 3
合并时得到如下结果
test <- test %>% group_by(id) %>% summarise_all(funs(f))
id value1 value2
1 a 0
2 c 1
现在的问题是:替换 NA (na.omit) 已经有效,但是我如何定义不是数值 0,而是接受不等于 0 的值。所以预期的结果是这样的:
id value1 value2
1 a 2
2 c 1

最佳答案

您可以修改您的 f函数通过对不为零的向量进行子集化

f <- function(x) {
x <- na.omit(x)
x <- x[x != 0]
if (length(x) > 0) first(x) else NA
}
旁注:截至 dplyr 0.8.0 , funs已弃用。你应该是一个 lambda、一个函数列表或一个 lambda 列表。在这种情况下,我使用了一个 lambda:
test %>%
group_by(id) %>%
summarise_all(~f(.))

# A tibble: 2 x 3
id value1 value2
<dbl> <chr> <int>
1 1 a 2
2 2 c 1

关于r - 通过分组汇总_所有行并定义应保留哪个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67567323/

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