如何在R中将所有列除以一列并保留原始数据?
为了将R数据框的所有列除以一列并保留原始数据,我们可以使用dplyr包的mutate_at函数以及list函数。
例如,如果我们有一个名为df的数据框,它包含五个列,例如x、y、z、a和b,那么我们可以使用以下命令将所有列除以b并保留原始数据:
df%>%mutate_at(vars(x:b),list(All_by_b=~./b))
示例1
以下代码片段创建一个示例数据框:
x1<-rpois(20,5) x2<-rpois(20,5) x3<-rpois(20,2) df1<-data.frame(x1,x2,x3) df1
创建了以下数据框:
x1 x2 x3 1 6 8 5 2 3 5 2 3 5 4 4 4 5 4 5 5 6 5 3 6 3 6 2 7 10 6 1 8 3 4 1 9 2 6 2 10 4 3 2 11 4 7 1 12 3 8 5 13 6 9 3 14 3 5 2 15 3 5 5 16 3 6 1 17 5 1 2 18 6 7 1 19 4 5 1 20 5 3 3
为了加载dplyr包并将每一列除以x3,请将以下代码添加到上面的代码片段中:
library(dplyr) df1%>%mutate_at(vars(x1:x3),list(All_by_x3=~./x3))
输出
如果您将上面给出的所有代码片段作为一个程序执行,它将生成以下输出:
x1 x2 x3 x1_All_by_x3 x2_All_by_x3 x3_All_by_x3 1 6 8 5 1.200000 1.600000 1 2 3 5 2 1.500000 2.500000 1 3 5 4 4 1.250000 1.000000 1 4 5 4 5 1.000000 0.800000 1 5 6 5 3 2.000000 1.666667 1 6 3 6 2 1.500000 3.000000 1 7 10 6 1 10.000000 6.000000 1 8 3 4 1 3.000000 4.000000 1 9 2 6 2 1.000000 3.000000 1 10 4 3 2 2.000000 1.500000 1 11 4 7 1 4.000000 7.000000 1 12 3 8 5 0.600000 1.600000 1 13 6 9 3 2.000000 3.000000 1 14 3 5 2 1.500000 2.500000 1 15 3 5 5 0.600000 1.000000 1 16 3 6 1 3.000000 6.000000 1 17 5 1 2 2.500000 0.500000 1 18 6 7 1 6.000000 7.000000 1 19 4 5 1 4.000000 5.000000 1 20 5 3 3 1.666667 1.000000 1
示例2
以下代码片段创建一个示例数据框:
y1<-rnorm(20) y2<-rnorm(20) df2<-data.frame(y1,y2) df2
创建了以下数据框:
y1 y2 1 0.14773302 1.16132215 2 -0.32074626 -1.49244515 3 2.19398775 0.28150318 4 1.01693094 -1.40535898 5 -1.42448609 1.67779412 6 -0.15938972 -1.09495586 7 0.52470550 -0.99145523 8 -0.78363853 -0.06675766 9 0.07709268 -0.12294655 10 0.78635469 2.58087152 11 -0.41811848 -0.41705329 12 0.64354838 -0.89271271 13 -0.42895143 0.52703245 14 -0.56728461 -0.43831806 15 0.39307336 0.08188360 16 1.10202078 0.35529659 17 -1.71921960 1.33118820 18 -1.13380901 -1.55504071 19 1.16703557 1.24537827 20 -0.32852345 1.48512287
要将每一列除以y1,请将以下代码添加到上面的代码片段中:
df2%>%mutate_at(vars(y1:y2),list(All_by_y1=~./y1))
输出
如果您将上面给出的所有代码片段作为一个程序执行,它将生成以下输出:
y1 y2 y1_All_by_y1 y2_All_by_y1 1 0.14773302 1.16132215 1 7.86095182 2 -0.32074626 -1.49244515 1 4.65303993 3 2.19398775 0.28150318 1 0.12830663 4 1.01693094 -1.40535898 1 -1.38196108 5 -1.42448609 1.67779412 1 -1.17782416 6 -0.15938972 -1.09495586 1 6.86967673 7 0.52470550 -0.99145523 1 -1.88954609 8 -0.78363853 -0.06675766 1 0.08518935 9 0.07709268 -0.12294655 1 -1.59478895 10 0.78635469 2.58087152 1 3.28207048 11 -0.41811848 -0.41705329 1 0.99745242 12 0.64354838 -0.89271271 1 -1.38717265 13 -0.42895143 0.52703245 1 -1.22865298 14 -0.56728461 -0.43831806 1 0.77265989 15 0.39307336 0.08188360 1 0.20831633 16 1.10202078 0.35529659 1 0.32240462 17 -1.71921960 1.33118820 1 -0.77429794 18 -1.13380901 -1.55504071 1 1.37151910 19 1.16703557 1.24537827 1 1.06712966 20 -0.32852345 1.48512287 1 -4.52059930
广告