如何计算R中许多列的NTile?
我有一个如下所示的数据帧:如何计算R中许多列的NTile?,r,dataframe,dplyr,mutate,R,Dataframe,Dplyr,Mutate,我有一个如下所示的数据帧: ID age sex chem1 chem2 chem3 ... chem524 01 64 m .06 6.8 .3 .2 02 57 f .7 24.3 NA .7 03 53 f .4 2.9 .03 1.6 04 68 m .7 37.8 .01 .01 05 73 m 1.2 1.4 2.8 3.6 06 49
ID age sex chem1 chem2 chem3 ... chem524
01 64 m .06 6.8 .3 .2
02 57 f .7 24.3 NA .7
03 53 f .4 2.9 .03 1.6
04 68 m .7 37.8 .01 .01
05 73 m 1.2 1.4 2.8 3.6
06 49 f .3 7.6 .3 2.9
我需要为每种化学物质做3个字节。我知道如何一次处理一种化学物质,但我不想写524次
我希望每种化学物质的ntiles都存储在一个新的数据框中,以便我以后可以对它们进行进一步的分析
以下是我希望输出数据帧的外观:
ID age sex chem1 chem2 chem3 ... chem524
01 64 m 1 2 2 1
02 57 f 2 3 NA 2
03 53 f 2 1 1 3
04 68 m 2 3 1 1
05 73 m 3 1 3 3
06 49 f 1 2 2 3
以下是我尝试过的:
df2 <- mutate_at(df, vars(chem1:chem524), ntile(top_air[4:528], 3))
df2这里有一种方法是在
处使用mutate\u:
library(dplyr)
df %>%
mutate_at(vars(starts_with("chem")), .funs = list(~ntile(.,3)))
ID age sex chem1 chem2 chem3 chem524
1 1 64 m 1 2 2 1
2 2 57 f 2 3 NA 2
3 3 53 f 2 1 1 2
4 4 68 m 3 3 1 1
5 5 73 m 3 1 3 3
6 6 49 f 1 2 2 3
df %>%
mutate_at(vars(starts_with("chem")), ntile, 3)
ID age sex chem1 chem2 chem3 chem524
1 1 64 m 1 2 2 1
2 2 57 f 2 3 NA 2
3 3 53 f 2 1 1 2
4 4 68 m 3 3 1 1
5 5 73 m 3 1 3 3
6 6 49 f 1 2 2 3
.funs=
参数的正确参数化有点特殊,但对于单个函数,只需提供一个以~
开头的元素列表~
是一个匿名函数的缩写,它有一个参数,我们可以使用
访问该参数
您还可以命名列表以获取新列:
df %>%
mutate_at(vars(starts_with("chem")), list(ntile = ~ntile(.,3)))
另一种方法是一起跳过匿名函数,并使用处的mutate\u的部分将附加参数传递给ntile
:
library(dplyr)
df %>%
mutate_at(vars(starts_with("chem")), .funs = list(~ntile(.,3)))
ID age sex chem1 chem2 chem3 chem524
1 1 64 m 1 2 2 1
2 2 57 f 2 3 NA 2
3 3 53 f 2 1 1 2
4 4 68 m 3 3 1 1
5 5 73 m 3 1 3 3
6 6 49 f 1 2 2 3
df %>%
mutate_at(vars(starts_with("chem")), ntile, 3)
ID age sex chem1 chem2 chem3 chem524
1 1 64 m 1 2 2 1
2 2 57 f 2 3 NA 2
3 3 53 f 2 1 1 2
4 4 68 m 3 3 1 1
5 5 73 m 3 1 3 3
6 6 49 f 1 2 2 3
这里有一种使用mutate_at
的方法:
library(dplyr)
df %>%
mutate_at(vars(starts_with("chem")), .funs = list(~ntile(.,3)))
ID age sex chem1 chem2 chem3 chem524
1 1 64 m 1 2 2 1
2 2 57 f 2 3 NA 2
3 3 53 f 2 1 1 2
4 4 68 m 3 3 1 1
5 5 73 m 3 1 3 3
6 6 49 f 1 2 2 3
df %>%
mutate_at(vars(starts_with("chem")), ntile, 3)
ID age sex chem1 chem2 chem3 chem524
1 1 64 m 1 2 2 1
2 2 57 f 2 3 NA 2
3 3 53 f 2 1 1 2
4 4 68 m 3 3 1 1
5 5 73 m 3 1 3 3
6 6 49 f 1 2 2 3
.funs=
参数的正确参数化有点特殊,但对于单个函数,只需提供一个以~
开头的元素列表~
是一个匿名函数的缩写,它有一个参数,我们可以使用
访问该参数
您还可以命名列表以获取新列:
df %>%
mutate_at(vars(starts_with("chem")), list(ntile = ~ntile(.,3)))
另一种方法是一起跳过匿名函数,并使用处的mutate\u的部分将附加参数传递给ntile
:
library(dplyr)
df %>%
mutate_at(vars(starts_with("chem")), .funs = list(~ntile(.,3)))
ID age sex chem1 chem2 chem3 chem524
1 1 64 m 1 2 2 1
2 2 57 f 2 3 NA 2
3 3 53 f 2 1 1 2
4 4 68 m 3 3 1 1
5 5 73 m 3 1 3 3
6 6 49 f 1 2 2 3
df %>%
mutate_at(vars(starts_with("chem")), ntile, 3)
ID age sex chem1 chem2 chem3 chem524
1 1 64 m 1 2 2 1
2 2 57 f 2 3 NA 2
3 3 53 f 2 1 1 2
4 4 68 m 3 3 1 1
5 5 73 m 3 1 3 3
6 6 49 f 1 2 2 3
下面是一个数据表
解决方案:
库(data.table)
df 2:57 f 0.70 3 NA 2
#>3:53 f 0.40 1 2
#>4:68M0.70311
#>5:73米1.20 1 3
#>6:49 f 0.3023
由(v0.3.0)于2020年5月23日创建。以下是数据。表解决方案:
库(data.table)
df 2:57 f 0.70 3 NA 2
#>3:53 f 0.40 1 2
#>4:68M0.70311
#>5:73米1.20 1 3
#>6:49 f 0.3023
由(v0.3.0)于2020年5月23日创建