Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用dplyr mutate自动生成新变量名_R_Dataframe_Dplyr_Tidyverse_Mutate - Fatal编程技术网

使用dplyr 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.

好的,这将是一篇很长的文章。 因此,我对R相当陌生(我目前正在使用MR free 3.5,没有检查点),但我正在尝试使用tidyverse,我发现它在编写代码方面非常优雅,而且很多时候非常简单

我决定复制guru99的一个练习。这是一个简单的k-means练习。然而,因为我总是想编写“可推广”的代码,所以我尝试用新名称自动重命名mutate中的变量。所以我搜索了一下,找到了这个非常好的解决方案

首先是好的

#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等的名称

  • 任何人都不知道如何在控制台上打印名字,比如price_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>