【问题标题】:Using R (and dplyr) to create multiple summary tables with factor information使用 R(和 dplyr)创建包含因子信息的多个汇总表
【发布时间】:2020-03-14 22:49:16
【问题描述】:

我是 R 初学者,我正在尝试使用如下所示的表格

ID Type
X  A
X  A
X  B
Y  C
Y  D
Y  E
Z  F
Z  F

并为每个 ID 值创建汇总表,使它们看起来像这样

X  Y  Z  
A  C  F
B  D
   E 

我将如何使用 dplyr 或类似的东西来做这件事?我尝试过做交叉表之类的事情,但由于没有数字值,我无法做到。

【问题讨论】:

  • 您想要“汇总表”中的唯一值还是计数?
  • 我将使用它们来创建数据验证表的唯一值

标签: r summary


【解决方案1】:

这是使用tidyverse的一种方法:

library(tidyverse)

df %>%
  group_by(ID) %>%
  distinct(ID, Type) %>%
  mutate(rn = row_number()) %>%
  pivot_wider(id_cols = rn, names_from = ID, values_from = Type) %>%
  replace(., is.na(.), " ") %>%
  as.data.frame() %>%
  select(-rn)

输出

  X Y Z
1 A C F
2 B D  
3   E  

数据

df <- data.frame(
  ID = c('X', 'X', 'X', 'Y', 'Y', 'Y', 'Z', 'Z'),
  Type = c('A', 'A', 'B', 'C', 'D', 'E', 'F', 'F'),
  stringsAsFactors = FALSE
)

【讨论】:

  • 完美!那效果很好。我无法让它在我桌面上的 R/RStudio 应用程序上运行。我不断收到无法找到 pivot_wider 的错误(运行 R 3.5.3),但在 R3.6 的 rstudio cloud 上运行它并且运行完美。谢谢。
  • 很高兴听到。请注意,pivot_wider 需要 tidyr >= tidyverse 的 1.0.0 版。
【解决方案2】:

您想下载“Psych”包并使用“describeBy()”函数。

id = c("X", "X", "X","Y","Y","Y","Z","Z")
type = c("A","A","B","C","D","E","F","F")
df = as.data.frame(id,type)

library("psych")

describeBy(df, group = id)

希望这会有所帮助。 https://www.rdocumentation.org/packages/psych/versions/1.9.12.31/topics/describeBy

【讨论】:

    【解决方案3】:

    我们可以在Type 中为每个ID 获取unique 值,并使用rowr::cbind.fill 将数据绑定在一起,用空字符串填充缺失值。

    setNames(do.call(rowr::cbind.fill, c(by(df$Type, df$ID, unique), fill = "")), 
             unique(df$ID))
    
    #  X Y Z
    #1 A C F
    #2 B D  
    #3   E  
    

    数据

    df <- structure(list(ID = c("X", "X", "X", "Y", "Y", "Y", "Z", "Z"), 
    Type = c("A", "A", "B", "C", "D", "E", "F", "F")), 
    class = "data.frame", row.names = c(NA, -8L))
    

    【讨论】:

      猜你喜欢
      • 2016-04-07
      • 2019-06-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 2021-11-16
      相关资源
      最近更新 更多