【发布时间】:2018-04-10 05:31:21
【问题描述】:
我是 R 新手,我正在尝试使用 dplyr 根据行值折叠行。以下示例显示了示例数据。
set.seed(123)
df<-data.frame(A=c(rep(1:4,4)),
B=runif(16,min=0,max=1),
C=rnorm(16, mean=1,sd=0.5))
A B c
1 1 0.36647435 0.7485365
2 2 0.51864614 0.8654337
3 3 0.04596929 0.9858012
4 4 0.15479619 1.1294208
5 1 0.76712372 1.2460700
6 2 0.17666676 0.7402996
7 3 0.89759874 1.2699954
8 4 0.90267735 0.7101804
9 1 0.91744223 0.3451281
10 2 0.25472599 0.8604743
11 3 0.10933985 0.8696796
12 4 0.71656017 1.2648846
13 1 0.21157810 1.3170205
14 2 0.14947268 1.2789700
15 3 0.92251060 1.5696901
16 4 0.30090579 1.7642853
我想根据以下条件汇总/折叠两行:A 列中的值为 1 和 2 的行作为一行(作为第 1 行和第 2 行的平均值)。因此最终结果将只有 12 行,因为其他 4 行已折叠。
我尝试使用以下dplyr 函数但收效甚微。
install.packages ("tidyverse") 图书馆(tidyverse)
df %>% summarize_each( fun(i){ for i %in% c(1,2)funs(mean) })
预期的输出类似于:
A B C
1 1.5 0.4425602 0.8069851
3 3 0.04596929 0.9858012
4 4 0.15479619 1.1294208
5 1.5 0.4718952 0.9931848
7 3 0.89759874 1.2699954
8 4 0.90267735 0.7101804
9 1.5 0.5860841 0.6028012
11 3 0.10933985 0.8696796
12 4 0.71656017 1.2648846
13 1.5 0.1805254 1.297995
15 3 0.92251060 1.5696901
16 4 0.30090579 1.7642853
提前谢谢你。
【问题讨论】:
-
行没有完全折叠,它们被 2 2 2 折叠并且你没有解释规则,在你的真实数据中你真的有这样的 4 行序列吗?
-
@Moody_Mudskipper 如果列 A 中的值为 1 和 2,则行将被折叠。
-
在生成随机数据时,在您的示例中包含
set.seed()调用会很有帮助。这样其他人就可以完全复制您的结果! -
我读过这个,但它似乎可以由 4 人一组工作,这是假设选择的答案采取了,但在你的问题中没有明确
标签: r group-by dplyr summarize