R 对所选列使用组_modify(保留整个数据框和顺序)
我在这一台上用完了R电源。我非常感谢任何帮助,对于经验丰富的人来说,这可能很简单 我有一个数据框(TIBLE),其中包含一些数字列、一个组列和一些包含其他信息的列。我想按组对数字列执行操作,但仍保留所有列 我在下面举了一个例子:对于每一列,我用组平均值替换NAs。替换NAs的列由df_names变量指定 它基本上是有效的,只是它删除了除数值列以外的所有列,并对所有列重新排序。这使得它很难重新组装。我可以解决这个问题,但我觉得必须有一种更简单的方法来指导group_应用于指定的列,同时保留其他列并保持顺序 有人能帮忙吗?非常感谢 意志R 对所选列使用组_modify(保留整个数据框和顺序),r,dplyr,R,Dplyr,我在这一台上用完了R电源。我非常感谢任何帮助,对于经验丰富的人来说,这可能很简单 我有一个数据框(TIBLE),其中包含一些数字列、一个组列和一些包含其他信息的列。我想按组对数字列执行操作,但仍保留所有列 我在下面举了一个例子:对于每一列,我用组平均值替换NAs。替换NAs的列由df_names变量指定 它基本上是有效的,只是它删除了除数值列以外的所有列,并对所有列重新排序。这使得它很难重新组装。我可以解决这个问题,但我觉得必须有一种更简单的方法来指导group_应用于指定的列,同时保留其他列并
库(“tidyverse”)
#创建可编辑的
在这种情况下,df组的修改是过度的mutate(cross())
这里是您的朋友:
df%>%分组依据(.dots=groupvar)%>%
变异(跨越(所有的(df_名称),~if_-else(is.na(.x),mean(.x,na.rm=TRUE),.x)))
结果:
> df
# A tibble: 10 x 5
# Groups: csize [2]
name csize v1 v2 v3
<chr> <chr> <dbl> <dbl> <dbl>
1 a L -1.22 1.48 -0.628
2 b S -1.17 0.0890 -0.130
3 c S -0.422 -0.0956 -0.0271
4 d L -0.265 0.180 -0.786
5 e L -0.491 0.509 -0.359
6 f S -0.422 -0.712 0.232
7 g L -0.400 -1.13 1.13
8 h S -0.538 -0.0785 0.690
9 i L 0.373 0.308 0.252
10 j S 0.445 0.743 -1.41
>df
#一个tibble:10x5
#组别:csize[2]
名称csize v1 v2 v3
1 a L-1.22 1.48-0.628
2 b S-1.17 0.0890-0.130
3 CS-0.422-0.0956-0.0271
4 d L-0.265 0.180-0.786
5 e L-0.491 0.509-0.359
6 f S-0.422-0.712 0.232
7 g L-0.400-1.13 1.13
8小时-0.538-0.0785 0.690
9 i L 0.373 0.308 0.252
10 j S 0.445 0.743-1.41
这是否有效:
> library(dplyr)
> df %>% group_by(csize) %>% mutate(across(v1:v3, ~ replace_na(., mean(., na.rm = T))))
# A tibble: 10 x 5
# Groups: csize [2]
name csize v1 v2 v3
<chr> <chr> <dbl> <dbl> <dbl>
1 a L 1.57 0.310 -1.76
2 b S -0.705 0.0655 0.577
3 c S -1.05 1.28 1.82
4 d L 0.958 -2.09 -0.371
5 e L -0.712 0.247 -1.13
6 f S -1.05 -0.516 -0.107
7 g L 0.403 1.79 0.128
8 h S -0.793 1.52 1.07
9 i L -0.206 -0.369 -1.77
10 j S -1.65 -0.992 -0.476
>库(dplyr)
>df%>%组由(csize)%>%突变(跨(v1:v3,~replace_na(,平均值(,na.rm=T)))
#一个tibble:10x5
#组别:csize[2]
名称csize v1 v2 v3
1 a L 1.57 0.310-1.76
2BS-0.7050.0655 0.577
3 CS-1.05 1.28 1.82
4 d L 0.958-2.09-0.371
5 e L-0.712 0.247-1.13
6 f S-1.05-0.516-0.107
7克升0.403 1.79 0.128
8小时-0.7931.52 1.07
9升-0.206-0.369-1.77
10 j S-1.65-0.992-0.476
是的,这正是我想要的!非常感谢你的帮助。
> library(dplyr)
> df %>% group_by(csize) %>% mutate(across(v1:v3, ~ replace_na(., mean(., na.rm = T))))
# A tibble: 10 x 5
# Groups: csize [2]
name csize v1 v2 v3
<chr> <chr> <dbl> <dbl> <dbl>
1 a L 1.57 0.310 -1.76
2 b S -0.705 0.0655 0.577
3 c S -1.05 1.28 1.82
4 d L 0.958 -2.09 -0.371
5 e L -0.712 0.247 -1.13
6 f S -1.05 -0.516 -0.107
7 g L 0.403 1.79 0.128
8 h S -0.793 1.52 1.07
9 i L -0.206 -0.369 -1.77
10 j S -1.65 -0.992 -0.476