【问题标题】:Need Help Incorporating Tidyr's Spread into a Function that Outputs a List of Dataframes with Grouped Counts需要帮助将 Tidyr 的 Spread 合并到一个输出具有分组计数的数据帧列表的函数中
【发布时间】:2018-03-04 07:19:38
【问题描述】:
library(tidyverse)

使用底部的样本数据,我想找到 Gender 和 FP 变量的计数,然后使用 tidyr::spread() 传播这些变量。我试图通过创建一个数据框列表来做到这一点,一个用于性别计数,一个用于 FP 计数。我这样做的原因是最终 cbind 两个数据帧。但是,我无法将 tidyr::spread 合并到我的函数中。

下面的函数创建了一个包含两个数据帧的列表,其中包含 Gender 和 FP 的计数,但计数并未“传播”。

  group_by_quo=quos(Gender,FP)

 DF2<-map(group_by_quo,~DF%>%
    group_by(Code,!!.x)%>%
    summarise(n=n()))  

如果我添加 tidyr::spread,它就不起作用。我不确定如何合并它,因为列表中的每个数据框都有不同的变量。

group_by_quo=quos(Gender,FP)

 DF2<-map(group_by_quo,~DF%>%
    group_by(Code,!!.x)%>%
    summarise(n=n()))%>%
    spread(!!.x,n) 

任何帮助将不胜感激!

示例代码:

Subject<-c("Subject1","Subject2","Subject1","Subject3","Subject3","Subject4","Subject2","Subject1","Subject2","Subject4","Subject3","Subject4")
Code<-c("AAA","BBB","AAA","CCC","CCC","DDD","BBB","AAA","BBB","DDD","CCC","DDD")
Code2<-c("AAA2","BBB2","AAA2","CCC2","CCC2","DDD2","BBB2","AAA2","BBB2","DDD2","CCC2","DDD2")
Gender<-c("Male","Male","Female","Male","Female","Female","Female","Male","Male","Male","Male","Male")
FP<-c("F","P","P","P","F","F","F","F","F","F","F","F")
DF<-data_frame(Subject,Code,Code2,Gender,FP)

【问题讨论】:

    标签: r tidyverse


    【解决方案1】:

    我认为你放错了右括号。这段代码对我有用:

    library(tidyverse)
    
    Subject<-c("Subject1","Subject2","Subject1","Subject3","Subject3","Subject4","Subject2","Subject1","Subject2","Subject4","Subject3","Subject4")
    Code<-c("AAA","BBB","AAA","CCC","CCC","DDD","BBB","AAA","BBB","DDD","CCC","DDD")
    Code2<-c("AAA2","BBB2","AAA2","CCC2","CCC2","DDD2","BBB2","AAA2","BBB2","DDD2","CCC2","DDD2")
    Gender<-c("Male","Male","Female","Male","Female","Female","Female","Male","Male","Male","Male","Male")
    FP<-c("F","P","P","P","F","F","F","F","F","F","F","F")
    DF<-data_frame(Subject,Code,Code2,Gender,FP)
    
    group_by_quo <- quos(Gender, FP)
    
    DF2 <- map(group_by_quo,
      ~DF %>%
        group_by(Code,!!.x) %>%
        summarise(n=n()) %>%
        spread(!!.x,n))
    

    最后一部分使用count 更加简洁:

    DF2 <- map(group_by_quo,
      ~DF %>%
        count(Code,!!.x) %>%
        spread(!!.x,n))
    

    通过使用count,也可以删除不必要的分组信息。

    【讨论】:

    • 谢谢,但是当我尝试我得到 - “错误:无效的列规范” - 你知道这个错误是什么意思吗?我只有在合并 tidyr::spread 组件时才会收到错误,否则它可以工作......
    • 你是说如果你打开一个新鲜的R,复制粘贴上面的代码sn-p,我贴的那个,你得到一个错误?我没有,我得到了我期望的结果。你可以试试吗?
    • 您使用的是最新版本的 Tidyr...包含 tidyeval 的软件包吗?我可能有一个更老的 tidyr。我会再次检查并尝试代码...
    • 我使用 tidyr 版本 0.8.0,没有 tidyeval。 R 版本 3.4.3 (2017-11-30) 平台:x86_64-pc-linux-gnu (64-bit) 运行于:Ubuntu 16.04.4 LTS
    • 我是我的 Tidyr 版本。我安装了最新版本,它工作。我认为较新的 Tidyr 软件包与 tidyeval 兼容,因此旧版本无法识别“!!”句法?无论如何,有这个问题和括号问题。我会继续接受你的回答...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    相关资源
    最近更新 更多