使用 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))
我是 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))