【问题标题】:Having trouble with tidyr gather()tidyr collect() 遇到问题
【发布时间】:2018-08-30 23:18:58
【问题描述】:

您好,我正在尝试从 Re_NM_df 创建一个长数据帧

head(Re_NM_df, n = 3)
AustinPulse.Remain AustinPulse.NM1_SpacePump AustinPulse.NM4_Nothing
1                 NA                         0                       0
2                 NA                         0                       0
3                 NA                         0                       0

但是,我得到了这个错误

RE_NM_Long <- gather(data = Re_NM_df, "NurseMom", "Likely", AustinPulse$Remain, 
AustinPulse$NM1_SpacePump)
Error: `AustinPulse$Remain` must evaluate to column positions or names, not an 
integer vector
In addition: Warning message:
'glue::collapse' is deprecated.
Use 'glue_collapse' instead.
See help("Deprecated") and help("glue-deprecated")

这是我的预期输出。

     NursingMom                     Remain                    Available
1    NM1_Space                         1                       1
2    NM1_Space                         4                       0
3    NM4_Nothing                       2                       1*

*受访者选择没有可用的内容。

我似乎无法很好地编写收集函数的代码。任何帮助表示赞赏。

谢谢。

【问题讨论】:

    标签: r tidyr


    【解决方案1】:

    感谢您的提问。很高兴看到您希望最终数据框看起来像的示例。为了提供帮助,下面我使用tidyr::gather 创建了一个可重现的示例,将您的示例数据转换为“长”数据框。

    使用gather 时要记住的关键事项是指定构成“键”和“值”对的列名。您还可以选择和排除要作为附加参数收集的列。

    library(tibble)
    library(dplyr)
    #> 
    #> Attaching package: 'dplyr'
    #> The following objects are masked from 'package:stats':
    #> 
    #>     filter, lag
    #> The following objects are masked from 'package:base':
    #> 
    #>     intersect, setdiff, setequal, union
    library(tidyr)
    
    x <- tribble(
      ~AustinPulse.Remain, ~AustinPulse.NM1_SpacePump, ~AustinPulse.NM4_Nothing,
                     NA,                         0,                       0,
                     NA,                         0,                       0,
                     NA,                         0,                       0
    )
    
    # gathering all columns
    x %>% 
      tidyr::gather(attribute, value)
    #> # A tibble: 9 x 2
    #>   attribute                 value
    #>   <chr>                     <dbl>
    #> 1 AustinPulse.Remain          NA 
    #> 2 AustinPulse.Remain          NA 
    #> 3 AustinPulse.Remain          NA 
    #> 4 AustinPulse.NM1_SpacePump    0.
    #> 5 AustinPulse.NM1_SpacePump    0.
    #> 6 AustinPulse.NM1_SpacePump    0.
    #> 7 AustinPulse.NM4_Nothing      0.
    #> 8 AustinPulse.NM4_Nothing      0.
    #> 9 AustinPulse.NM4_Nothing      0.
    
        # here I have excluded AustinPulse.Remain from the gather
    x %>% 
      tidyr::gather(NursingMom, value, -AustinPulse.Remain) %>% 
      dplyr::select(NursingMom, value, AustinPulse.Remain)
    #> # A tibble: 6 x 3
    #>   NursingMom                value AustinPulse.Remain
    #>   <chr>                     <dbl> <lgl>             
    #> 1 AustinPulse.NM1_SpacePump    0. NA                
    #> 2 AustinPulse.NM1_SpacePump    0. NA                
    #> 3 AustinPulse.NM1_SpacePump    0. NA                
    #> 4 AustinPulse.NM4_Nothing      0. NA                
    #> 5 AustinPulse.NM4_Nothing      0. NA                
    #> 6 AustinPulse.NM4_Nothing      0. NA
    

    【讨论】:

    • 谢谢。让我编辑问题以显示我的预期输出。我认为你的代码会让我到达我想去的地方。
    • 您共享的代码是否适用于我的预期输出?感谢您的贡献。
    • 我对您的数据仍然有些不清楚,尤其是“可用”列以及您正在执行的聚合类型。但我已经更新了我的答案,让你更接近一点。希望我已经回答了您关于如何使用收集功能的问题。如果是,请接受。
    • 谢谢!这正是我想要的。也许我的问题源于不清楚我想要可用的代表什么。顺便问一下,你是从哪里学到的整理技能的?
    • 不客气。那里有很多好的资源,请查看tidyverse website 和一本优秀的在线书籍R for Data Science。祝你好运
    猜你喜欢
    • 1970-01-01
    • 2020-10-15
    • 2020-02-28
    • 2015-05-11
    • 1970-01-01
    • 2014-11-30
    • 2021-08-09
    • 2017-05-02
    • 2021-02-01
    相关资源
    最近更新 更多