使用dplyr mutate自动生成新变量名
好的,这将是一篇很长的文章。 因此,我对R相当陌生(我目前正在使用MR free 3.5,没有检查点),但我正在尝试使用tidyverse,我发现它在编写代码方面非常优雅,而且很多时候非常简单 我决定复制guru99的一个练习。这是一个简单的k-means练习。然而,因为我总是想编写“可推广”的代码,所以我尝试用新名称自动重命名mutate中的变量。所以我搜索了一下,找到了这个非常好的解决方案 首先是好的使用dplyr mutate自动生成新变量名,r,dataframe,dplyr,tidyverse,mutate,R,Dataframe,Dplyr,Tidyverse,Mutate,好的,这将是一篇很长的文章。 因此,我对R相当陌生(我目前正在使用MR free 3.5,没有检查点),但我正在尝试使用tidyverse,我发现它在编写代码方面非常优雅,而且很多时候非常简单 我决定复制guru99的一个练习。这是一个简单的k-means练习。然而,因为我总是想编写“可推广”的代码,所以我尝试用新名称自动重命名mutate中的变量。所以我搜索了一下,找到了这个非常好的解决方案 首先是好的 #library(tidyverse) link <- "https://raw.
#library(tidyverse)
link <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/computers.csv"
df <- read.csv(link)
rescaled <- df %>% discard(is.factor) %>%
select(-X) %>%
mutate_all(
funs("scaled" = scale)
)
#库(tidyverse)
链接%
突变(
funs(“缩放”=缩放)
)
当您使用read.csv下载数据时,您将在dataframe类中获得df,一切正常
现在奇怪的想法开始了。如果您使用read_csv下载数据,或在之后的任何时间点将其设置为TIB(第一个X变量将命名为X1,您需要将is.factor更改为is.character,因为除非明确要求,否则stings会转换为character not factors,以供将来的me和其他人使用。)
然后运行代码
df1 <- read_csv(link)
df1 %>% discard(is.character) %>%
select(-X1) %>%
mutate_all(
funs("scaled" = scale)
)
df1%丢弃(is.字符)%>%
选择(-X1)%>%
突变(
funs(“缩放”=缩放)
)
在控制台中查看输出或打印()时,新命名变量被命名为price_scaled[,1]speed_scaled[,1]hd_scaled[,1]ram_scaled[,1]等
但是如果你在上面查看(),你会看到带有你期望的名称的输出,这些名称是price\u scaled speed\u scaled hd\u scaled等。同样我正在为代码使用一个Rmarkdown文档,当我将块输出更改为内联时,它会正确地显示带有hd\u scaled等的名称
scale()
返回一个矩阵,dplyr/tibble不会自动将其强制为向量。通过将mutate_all()
调用更改为下面的,我们可以让它返回一个向量。我通过调用类(df1$speed\u scaled)
并查看“matrix”的结果来确定这就是正在发生的事情
库(tidyverse)
使用列规范解析的链接:
#>科尔斯(
#>X1=col_double(),
#>price=col_double(),
#>速度=col_double(),
#>hd=col_double(),
#>ram=col_double(),
#>screen=col_double(),
#>cd=列字符(),
#>multi=列字符(),
#>高级=列字符(),
#>ads=col_double(),
#>趋势=col_double()
#> )
df%%>%放弃(is.字符)%%>%
选择(-X1)%>%
突变(
列表(“缩放”=功能(x)缩放(x)[[1]])
)
#>#A tible:6259 x 14
#>价格速度高清ram屏幕广告趋势价格\u缩放速度\u缩放
#>
#> 1 1499 25 80 4 14 94 1 -1.24 -1.28
#> 2 1795 33 85 2 14 94 1 -1.24 -1.28
#> 3 1595 25 170 4 15 94 1 -1.24 -1.28
#> 4 1849 25 170 8 14 94 1 -1.24 -1.28
#> 5 3295 33 340 16 14 94 1 -1.24 -1.28
#> 6 3695 66 340 16 14 94 1 -1.24 -1.28
#> 7 1720 25 170 4 14 94 1 -1.24 -1.28
#> 8 1995 50 85 2 14 94 1 -1.24 -1.28
#> 9 2225 50 210 8 14 94 1 -1.24 -1.28
#> 10 2575 50 210 4 15 94 1 -1.24 -1.28
#> # ... 再增加6249行和5个变量:hd_scaled,
#>#ram#u缩放、screen#u缩放、ads#u缩放、,
#>#趋势#
library(tidyverse)
link <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/computers.csv"
df <- read_csv(link)
#> Warning: Missing column names filled in: 'X1' [1]
#> Parsed with column specification:
#> cols(
#> X1 = col_double(),
#> price = col_double(),
#> speed = col_double(),
#> hd = col_double(),
#> ram = col_double(),
#> screen = col_double(),
#> cd = col_character(),
#> multi = col_character(),
#> premium = col_character(),
#> ads = col_double(),
#> trend = col_double()
#> )
df %>% discard(is.character) %>%
select(-X1) %>%
mutate_all(
list("scaled" = function(x) scale(x)[[1]])
)
#> # A tibble: 6,259 x 14
#> price speed hd ram screen ads trend price_scaled speed_scaled
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 1499 25 80 4 14 94 1 -1.24 -1.28
#> 2 1795 33 85 2 14 94 1 -1.24 -1.28
#> 3 1595 25 170 4 15 94 1 -1.24 -1.28
#> 4 1849 25 170 8 14 94 1 -1.24 -1.28
#> 5 3295 33 340 16 14 94 1 -1.24 -1.28
#> 6 3695 66 340 16 14 94 1 -1.24 -1.28
#> 7 1720 25 170 4 14 94 1 -1.24 -1.28
#> 8 1995 50 85 2 14 94 1 -1.24 -1.28
#> 9 2225 50 210 8 14 94 1 -1.24 -1.28
#> 10 2575 50 210 4 15 94 1 -1.24 -1.28
#> # ... with 6,249 more rows, and 5 more variables: hd_scaled <dbl>,
#> # ram_scaled <dbl>, screen_scaled <dbl>, ads_scaled <dbl>,
#> # trend_scaled <dbl>