【问题标题】:How to gather specific columns如何收集特定列
【发布时间】:2021-06-23 22:07:40
【问题描述】:

我正在以一种 tidyverse 的方式处理我的数据集。但是,最后的 recode 函数不起作用。这是一个例子:

olddata <- data.frame(
       x = rep(1,12),
       var_a = sample(1:10, 12, replace = TRUE),
       var_b = sample(1:10, 12, replace = TRUE),
       var_c = sample(1:10, 12, replace = TRUE))

newdata <- olddata %>%
  gather(var, type, var_a:var_c) %>%
  separate(var, into = c("var", "role"), sep = -1) %>%
  recode(role, "a"=1, "b"=2, "c"=3)

错误信息说

UseMethod("recode") 中的错误:没有适用于“recode”的方法应用于“data.frame”类的对象

这里有什么问题?

【问题讨论】:

    标签: r tidyverse data-manipulation recode


    【解决方案1】:

    gather 已停用。如果你使用pivot_longer 函数,它可以在这里结合gatherseparate 一步。

    library(dplyr)
    library(tidyr)
    
    olddata %>%
      pivot_longer(cols = -x, 
                   names_to = c('var', 'role'), 
                   names_pattern = '(var_)(.*)') %>%
      mutate(role = recode(role, "a"=1, "b"=2, "c"=3))
    
    #       x var    role value
    #   <dbl> <chr> <dbl> <int>
    # 1     1 var_      1     6
    # 2     1 var_      2     1
    # 3     1 var_      3     9
    # 4     1 var_      1     4
    # 5     1 var_      2     6
    # 6     1 var_      3     7
    # 7     1 var_      1     5
    # 8     1 var_      2     8
    # 9     1 var_      3     8
    #10     1 var_      1     7
    # … with 26 more rows
    

    【讨论】:

    • 不错。我认为您在运行 mutate 语句之前发布了输出 - role 应该显示整数,对吗?
    • 没错。更新了答案以将 role 包含为整数。谢谢@William
    【解决方案2】:

    recode 是一个返回向量的函数。如果您的目标是 tidyverse 工作流程,您可以使用 mutate 函数来获得所需的结果

    newdata <- olddata %>%
      gather(var, type, var_a:var_c) %>%
      separate(var, into = c("var", "role"), sep = -1) %>%
      mutate( role = recode(role, "a"=1, "b"=2, "c"=3))
    
    head(newdata)
      x  var role type
    1 1 var_    1    3
    2 1 var_    1    5
    3 1 var_    1    2
    4 1 var_    1    4
    5 1 var_    1   10
    6 1 var_    1    7
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-25
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 2018-04-02
      • 2020-10-20
      相关资源
      最近更新 更多