【发布时间】:2020-05-13 11:14:06
【问题描述】:
【问题讨论】:
标签: r
【问题讨论】:
标签: r
使用tidyverse 你可以group_by 你的ID 然后summarise。使用collapse 表示您想为paste 使用分隔符(在本例中为分号)。
library(tidyverse)
df %>%
group_by(ID) %>%
summarise(MovieCode = paste(MovieCode, collapse = ";"))
或者在基础 R 中,使用 aggregate:
aggregate(MovieCode ~ ID, df, paste, collapse = ";")
输出
ID MovieCode
1 ABC A10;A12;A13
2 BDE A11
3 CDE A14
数据
df <- structure(list(ID = c("ABC", "BDE", "ABC", "ABC", "CDE"), MovieCode = c("A10",
"A11", "A12", "A13", "A14")), class = "data.frame", row.names = c(NA,
-5L))
【讨论】:
你可以用数据表轻松做到:
library(data.table)
#create table
ID <- c("ABC","BDE", "ABC","ABC","CDE")
Movie_Code <- c("A10","A11","A12","A13","A14")
df <- data.frame(ID, Movie_Code)
#convert to data table
df<-data.table(df)
setkey(df, ID)
final_tab<-df[, paste(unique(Movie_Code), collapse=", "),by=ID]
#CSV: comma separated values
输出:
ID V1
1: ABC A10, A12, A13
2: BDE A11
3: CDE A14
发件人:Daniel Bachen
【讨论】:
这是base R 解决方案:
说明性数据:
df <- data.frame(
v1 = c("ABA", "BCB", "ABA", "BCB", "DCD"),
v2 = letters[1:5]
)
解决办法:
df1 <- data.frame(
v1_unique = unique(df$v1),
v2_paste = tapply(df$v2, df$v1, paste0, collapse = ";"), row.names = NULL)
结果:
df1
v1_unique v2_paste
1 ABA a;c
2 BCB b;d
3 DCD e
【讨论】: