gpt4 book ai didi

r - 以可读的方式获取不同的 dplyr 计数

转载 作者:行者123 更新时间:2023-12-02 12:28:31 25 4
gpt4 key购买 nike

我是 dplyr 的新手,我需要计算一组中的不同值。这是一个表格示例:

data <- data.frame(aa = c(1, 2, 3, 4, NA), 
bb = c('a', 'b', 'a', 'c', 'c'))

我知道我可以做这样的事情:

library(dplyr)

by_bb <- group_by(data, bb, add = TRUE)
summarise(by_bb, mean(aa, na.rm = TRUE), max(aa), sum(!is.na(aa)), length(aa))

但是如果我想要唯一元素的数量?

我能做到:

  > summarise(by_bb, length(unique(unlist(aa))))

bb length(unique(unlist(aa)))
1 a 2
2 b 1
3 c 2

如果我想排除 NA,我可以这样做:

> summarise(by_bb,length(unique(unlist(aa[!is.na(aa)]))))

bb length(unique(unlist(aa[!is.na(aa)])))
1 a 2
2 b 1
3 c 1

但它对我来说有点难以阅读。有没有更好的方法来进行这种总结?

最佳答案

这个选项怎么样:

library(magrittr)

data %>% # take the data.frame "data"
filter(!is.na(aa)) %>% # Using "data", filter out all rows with NAs in aa
group_by(bb) %>% # Then, with the filtered data, group it by "bb"
summarise(Unique_Elements = n_distinct(aa)) %>% # Now summarise with unique elements per group
ungroup()

#Source: local data frame [3 x 2]
#
# bb Unique_Elements
#1 a 2
#2 b 1
#3 c 1

使用filter过滤掉aa有NA的行,然后按列bb对数据进行分组,然后通过计数进行汇总aa 列的唯一元素按 bb 组排列。

如您所见,我正在使用管道运算符 %>%,您可以在使用 dplyr 时使用它来“管道”或“链接”命令。这可以帮助您编写易于阅读的代码,因为它更自然,例如您从左到右编写代码,从上到下编写代码,而不是从内到外深度嵌套(如示例代码中所示)。

编辑:

在问题的第一部分中,您写道:

I know I can do things like:

by_bb<-group_by(data, bb, add = TRUE)
summarise(by_bb, mean(aa, na.rm=TRUE), max(aa), sum(!is.na(aa)), length(aa))

这是执行此操作的另一个选项(将多个函数应用于同一列):

data %>%
filter(!is.na(aa)) %>%
group_by(bb) %>%
summarise_each(list(mean = mean, max = max, sum = sum, n_distinct = n_distinct), aa)

#Source: local data frame [3 x 5]
#
# bb mean max sum n_distinct
#1 a 2 3 4 2
#2 b 2 2 2 1
#3 c 4 4 4 1

关于r - 以可读的方式获取不同的 dplyr 计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26720349/

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