传播data.frame中包含的列表

时间:2016-01-14 17:08:32

标签: r dplyr

一个方便的技巧(特别是对于统计测试)是将宽数据帧转换为带有嵌入列表的长数据帧。

df <- data.frame(
    A = sample(c(1:10),1000,replace = TRUE), 
    B = sample(c(1:10),1000,replace = TRUE), 
    C = sample(c(1:10),1000,replace = TRUE)) %>% 
    gather %>% group_by(key) %>% 
    summarize(response_list = list(value))

给定带有嵌入列表的data.frame,如何为每个嵌入列表附加摘要计数,以便data.frame看起来像这样:

key response_list 1 2 3 4 5 6 7 8 9 10
A   list()        x x x x x x x x x x 
...

其中,x,是嵌入列表中每个数字出现的相应计数(类似于table(factor(the_list())

1 个答案:

答案 0 :(得分:3)

df <- cbind(df, do.call(rbind, lapply(df$response_list, table)))
tbl_df(df)
# Source: local data frame [3 x 12]
#
#      key response_list     1     2     3     4     5     6     7     8     9    10
#   (fctr)         (chr) (int) (int) (int) (int) (int) (int) (int) (int) (int) (int)
# 1      A   <int[1000]>    97   105    97   100   103   103    86   101    90   118
# 2      B   <int[1000]>    98   100   108    92   115    87   101   105    98    96
# 3      C   <int[1000]>   109    97    87    92    91    90   114   109   104   107