在列表中的数据帧列的子集上应用简洁功能

时间:2017-11-06 23:01:12

标签: r dataframe iteration mean tidyverse

我有一个名为“n.l.df”的数据框(12列,8行)列表(28项)。 需要在每个数据帧内分别在列1:3,4:6,7:9,10:12上逐行应用统计信息。我正在遍历列表,通过执行以下操作来计算统计数据:

m > y

这很好用,我可以在需要时删除2,3,5,6,8,9,11和12列中不必要的值。我喜欢我不必将数据帧收集到长格式中,并将其保存为数据帧列表是可取的。

显然,这种方式过于重复,我认为必须有一种方法来进行嵌套lapply / apply,但它超出了我的水平。如何简化和缩短此代码?

感谢。

1 个答案:

答案 0 :(得分:3)

MapInfo(nibName: "XibName", bundle: nil)

这将为您提供28个数据框的列表,每个数据框添加4列统计数据。如果您只想要这些方法,请将library(tidyverse) # For reproducibility set.seed(100) # list of 28 random data frames df_list <- rerun(28, data.frame(replicate(12,sample(1:100,8)))) # Use map to iterate over the list, using rowMeans and select to get means of select columns. map(df_list, ~mutate(., rm_1_3 = rowMeans(select(., 1:3)), rm_4_6 = rowMeans(select(., 4:6)), rm_7_9 = rowMeans(select(., 7:9)), rm_10_12 = rowMeans(select(., 10:12)))) [[1]] X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 rm_1_3 rm_4_6 rm_7_9 rm_10_12 1 31 55 21 43 35 34 21 13 45 58 46 31 35.66667 37.33333 26.33333 45.00000 2 26 17 36 17 95 86 31 23 36 96 60 73 26.33333 66.00000 30.00000 76.33333 3 55 62 99 76 69 77 33 59 100 65 91 89 72.00000 74.00000 64.00000 81.66667 4 6 86 67 86 87 81 20 21 44 61 96 21 53.00000 84.66667 28.33333 59.33333 5 45 27 52 53 18 58 23 45 24 83 4 35 41.33333 43.00000 30.66667 40.66667 6 46 38 68 27 60 47 27 62 66 74 55 43 50.66667 44.66667 51.66667 57.33333 7 77 72 51 46 94 74 56 91 39 79 69 86 66.66667 71.33333 62.00000 78.00000 8 35 63 70 87 13 83 24 63 31 9 24 37 56.00000 61.00000 39.33333 23.33333 替换为transmute