R折叠列以形成数字列表

时间:2019-02-15 09:29:37

标签: r

R中,我会折叠列以形成具有数字列表类型的另一列。

就像我们将数字列表定义为l = c(1,2,3)

df <- read.table(text = "X  Y
a   26
a   3
a   24
b   8
b   1
b   4
", header = TRUE)

我正在尝试用dplyr进行操作,但这给了我字符列表列

> df %>% group_by(X) %>% summarise(lst= paste0(Y, collapse = ","))
# A tibble: 2 x 2
  X     lst    
  <fct> <chr>  
1 a     26,3,24
2 b     8,1,4 

2 个答案:

答案 0 :(得分:2)

X分组,然后将Y概括为list

library(dplyr)
out <- df %>% 
  group_by(X) %>% 
  summarise(Y = list(Y))
out
# A tibble: 2 x 2
#  X     Y        
#  <fct> <list>   
#1 a     <int [3]>
#2 b     <int [3]>

Y列现在看起来像这样

out$Y
#[[1]]
#[1] 26  3 24
#
#[[2]]
#[1] 8 1 4

nest似乎是另一种选择,但这会导致tibbles的列表列(不是我想的那样)

df %>% 
  group_by(X) %>% 
  nest()
# A tibble: 2 x 2
#  X     data            
#  <fct> <list>          
#1 a     <tibble [3 × 1]>
#2 b     <tibble [3 × 1]>

答案 1 :(得分:1)

一种data.table解决方案:

library(data.table)
dt <- as.data.table(df)[, list(Y=list(Y)), by="X"]

> dt
   X        Y
1: a 26, 3,24
2: b    8,1,4
> dt$Y
[[1]]
[1] 26  3 24

[[2]]
[1] 8 1 4