任务以前我只处理几个变量-通常是5 - 10个,也许还有一个或两个分裂变量。现在变量的数量正在迅速增加,它们正在改变名称。例如,我有这个(虚拟)数据集:
V_1 V_2 V_3 V_4 V_5
1 x 3 3 2 3
2 x 4 4 3 3
3 x 2 5 4 4
4 x 5 4 5 4
5 t 6 2 4 5
6 t 4 3 5 4
7 t 5 4 4 5
8 t 3 5 6 4
9 s 4 6 2 4
10 s 2 5 4 4
11 s 3 4 3 6
12 s 4 5 4 2
13 r 3 4 5 2
14 r 2 3 4 4
15 r 3 4 4 5
16 r 4 3 4 4
其中V_1是split-variable,我用途:
library(dplyr)
df1 <- data %>%
group_by(V_1) %>%
mutate(S_v2=scale(V_2)*2+5.5)
df2 <- df1 %>%
group_by(V_1) %>%
mutate(S_v3=scale(V_3)*2+5.5)
df3 <- df2 %>%
group_by(V_1) %>%
mutate(S_v4=scale(V_4)*2+5.5)
df4 <- df3 %>%
group_by(V_1) %>%
mutate(S_v5=scale(V_5)*2+5.5)
结果会是这样:
V_1 V_2 V_3 V_4 V_5 S_v2[,1] S_v3[,1] S_v4[,1] S_v5[,1]
<chr> <int> <int> <int> <int> <dbl> <dbl> <dbl> <dbl>
1 x 3 3 2 3 4.73 3.05 3.18 3.77
2 x 4 4 3 3 6.27 5.5 4.73 3.77
3 x 2 5 4 4 3.18 7.95 6.27 7.23
4 x 5 4 5 4 7.82 5.5 7.82 7.23
5 t 6 2 4 5 7.82 3.18 3.93 7.23
6 t 4 3 5 4 4.73 4.73 6.02 3.77
7 t 5 4 4 5 6.27 6.27 3.93 7.23
8 t 3 5 6 4 3.18 7.82 8.11 3.77
9 s 4 6 2 4 7.07 7.95 2.89 5.5
10 s 2 5 4 4 2.89 5.5 7.07 5.5
11 s 3 4 3 6 4.98 3.05 4.98 7.95
12 s 4 5 4 2 7.07 5.5 7.07 3.05
13 r 3 4 5 2 5.5 7.23 8.5 2.72
14 r 2 3 4 4 3.05 3.77 4.5 5.90
15 r 3 4 4 5 5.5 7.23 4.5 7.49
16 r 4 3 4 4 7.95 3.77 4.5 5.90
这是通过split-variable标准化每个变量的10分制。到目前为止还不错(如果你只有几个变量......)。现在,我有300多个变量,并且来自不同数据集的变量名称不断变化,如果我按照我的老套路,这项任务相当乏味。
我已经看过各种循环函数,但还没有设法把事情做好。数据集不断增长,我的老板变得不耐烦了。最终目标是使用可以自动化这些事情的代码。有人能帮我吗?
这是我需要的:
df <- data %>%
group_by(colname_1) %>%
mutate(S_colname = scale(colname)*2+5.5)
Repeat this block of code with the same group_by but with different
colnames
2条答案
按热度按时间am46iovg1#
使用
across
:c(..)
的使用是对列缩放的结果进行解矩阵(您注意到您的结构中嵌入了矩阵吗?)。如果您使用的是
dplyr_1.1.0
或更高版本,则可以将其稍微缩短为afdcj2ne2#
或者用旋转的方法把它变得更复杂:注意:@r2evans在1行中做了什么,我们需要6行。