gpt4 book ai didi

r - 是否有一些函数可以使用 group_by 在 R dplyr 中保留唯一值?

转载 作者:行者123 更新时间:2023-12-05 06:52:20 27 4
gpt4 key购买 nike

我有一个带有 id 变量的 data.frame(或 tiibble 或其他)。我经常用dplyr::group_by对这个id做一些操作,所以

data %>%
group_by(id) %>%
summarise/mutate/...()

通常,我还有其他非数字变量,它们对于每个 id 都是唯一的,例如 projectcountry id所属和id的其他特征(如性别等)。当我使用上面的 summarise 函数时,除非我指定,否则这些其他变量将丢失

data %>%
group_by(id) %>%
summarise(across(c(project, country, gender, ...), unique),...)

data %>%
group_by(id, project, country, gender, ...) %>%
summarise()

是否有一些函数可以检测这些变量,这些变量对于每个 id 都是唯一的,因此不必指定它们?

谢谢!

PS:我主要问的是dplyrgroup_by 相关的功能,但其他环境如R-basedata。 table 也很受欢迎。

最佳答案

我没有对它进行广泛的测试,但它应该可以完成工作

library(dplyr)

myData <- tibble(X = c(1, 1, 2, 2, 2, 3),
Y = LETTERS[c(1, 1, 2, 2, 2, 3)],
R = rnorm(6))
myData
#> # A tibble: 6 x 3
#> X Y R
#> <dbl> <chr> <dbl>
#> 1 1 A 0.463
#> 2 1 A -0.965
#> 3 2 B -0.403
#> 4 2 B -0.417
#> 5 2 B -2.28
#> 6 3 C 0.423

group_by_id_vars <- function(.data, ...) {
# group by the prespecified ID variables
.data <- .data %>% group_by(...)

# how many groups do these ID determine
ID_groups <- .data %>% n_groups()

# Get the number of groups if the initial grouping variables are combined
# with other variables
groupVars <- sapply(substitute(list(...))[-1], deparse) #specified grouping Variable
nms <- names(.data) # all variables in .data
res <- sapply(nms[!nms %in% groupVars],
function(x) {
.data %>%
# important to specify add = TRUE to combine the variable
# with the IDs
group_by(across(all_of(x)), .add = TRUE) %>%
n_groups()})

# which combinations are identical, i.e. this variable does not increase the
# number of groups in the data if combined with IDvars
v <- names(res)[which(res == ID_groups)]

# group the data accordingly
.data <- .data %>% ungroup() %>% group_by(across(all_of(c(groupVars, v))))
return(.data)
}

myData %>%
group_by_id_vars(X) %>%
summarise(n = n())
#> `summarise()` regrouping output by 'X' (override with `.groups` argument)
#> # A tibble: 3 x 3
#> # Groups: X [3]
#> X Y n
#> <dbl> <chr> <int>
#> 1 1 A 2
#> 2 2 B 3
#> 3 3 C 1

关于r - 是否有一些函数可以使用 group_by 在 R dplyr 中保留唯一值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65990620/

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