我需要在一行中用不同的列表示分组数据。例如:
ID Action_Number
1 A
1 B
1 C
2 D
2 E
所需的输出是: -
1 A B C
2 D E
我已经尝试了各种技术和转置,但无法获得准确的输出。请帮忙。
答案 0 :(得分:1)
最简单的选择是split
将'ID''的'Action_Number'转换为list
的{{1}}输出
vector
但是,如果我们需要split(df1$Action_Number, df1$ID)
,则可以使用data.frame/data.table
dcast
请注意,library(data.table)#1.9.7+
dcast(setDT(df1), ID~rowid(ID), value.var = 'Action_Number')
的开发版可以使用rowid
。因此,如果我们的data.table
版本是< 1.9.7,然后创建一个序列变量,然后执行data.table
dcast
答案 1 :(得分:1)
使用tidyverse
(dplyr
和tidyr
)
tab <- readr::read_delim("ID Action_Number
1 A
1 B
1 C
2 D
2 E", delim = " ")
tab %>%
dplyr::group_by(ID) %>%
dplyr::mutate(rn = paste0("V", 1:n())) %>%
tidyr::spread(rn, Action_Number)
#> Source: local data frame [2 x 4]
#> Groups: ID [2]
#>
#> ID V1 V2 V3
#> * <int> <chr> <chr> <chr>
#> 1 1 A B C
#> 2 2 D E <NA>
答案 2 :(得分:0)
如果您还希望将它们保留为列表,则可以执行以下操作:
df = data.frame(ID=c(1, 1, 1, 2, 2), Action_Number = c('A', 'B', 'C', 'D', 'E'), stringsAsFactors = F)
unique_IDs <- unique(df$ID)
l = list()
for(i in 1:length(unique_IDs)){
l[[i]] <- df[df$ID == i,"Action_Number"]
}
这里l
为您提供:
[[1]]
[1] "A" "B" "C"
[[2]]
[1] "D" "E"