需要帮助将Tidyr的Spread整合到一个函数中,该函数输出带有分组计数的数据帧列表

问题描述 投票:3回答:1
library(tidyverse)

使用底部的示例数据,我想查找Gender和FP变量的计数,然后使用tidyr :: spread()传播这些变量。我试图通过创建一个数据帧列表来实现这一点,一个用于性别计数,另一个用于FP计数。我这样做的原因是最终同时绑定两个数据帧。但是,我在将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个回答
2
投票

我认为你放错了右括号。这段代码适合我:

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,也可以删除不必要的分组信息。

© www.soinside.com 2019 - 2024. All rights reserved.