gpt4 book ai didi

r - 在特定组内排列值

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

我正在尝试在嵌套数据框中的确切组内按降序排列值。我的输入数据看起来像这样。我有两个分组变量( group1group2 )和三个值(即 idvalue2value3 )。

library(tidyverse)
set.seed(1234)

df <- tibble(group1 = c(rep(LETTERS[1:3], 4)),
group2 = c(rep(0, 6), rep(2, 6)),
value2 = rnorm(12, 20, sd = 10),
value3 = rnorm(12, 20, sd = 50)) %>%
group_by(group1) %>%
mutate(id = c(1:4)) %>%
ungroup()

我决定按 group1 将它们分组和 group2然后 nest() :
df_nested <- df %>% 
group_by(group1, group2) %>%
nest()

# A tibble: 6 x 3
# Groups: group1, group2 [6]
group1 group2 data
<chr> <dbl> <list>
1 A 0 <tibble [2 x 3]>
2 B 0 <tibble [2 x 3]>
3 C 0 <tibble [2 x 3]>
4 A 2 <tibble [2 x 3]>
5 B 2 <tibble [2 x 3]>
6 C 2 <tibble [2 x 3]>

完美的。现在我只需要排序那些 data其中 group2等于 2来自 id .但是我收到以下错误:
df_nested %>% 
mutate(data = map2_df(.x = data, .y = group2,
~ifelse(.y == 2, arrange(-.x$id),
.x)))

Error: Argument 1 must have names

最佳答案

你可以这样做:

library(dplyr)
library(purrr)

df_nested$data <- map2(df_nested$data, df_nested$group2,~if(.y == 2)
arrange(.x, -.x$id) else .x)

所以数据在哪里 group2不等于 2 不排序
df_nested$data[[1]]
# A tibble: 2 x 3
# value2 value3 id
# <dbl> <dbl> <int>
#1 13.1 -89.0 1
#2 9.76 -3.29 2

哪里 group2是 2 排序。
df_nested$data[[4]]
# A tibble: 2 x 3
#value2 value3 id
# <dbl> <dbl> <int>
#1 15.0 -28.4 4
#2 31.0 -22.8 3

如果您想将它们结合起来,请执行以下操作:
map2_df(df_nested$data, df_nested$group2,~if(.y == 2) arrange(.x, -.x$id) else .x)

关于r - 在特定组内排列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60224883/

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