使用 R(和 dplyr)创建包含因子信息的多个汇总表

Using R (and dplyr) to create multiple summary tables with factor information

我是 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 或类似的东西来做这件事?我试过做一些类似交叉表的事情,但是因为没有数字值我没能做到。

您想下载 "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

这是一种使用 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
)

我们可以为每个 ID 获取 Type 中的 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))