所以,这个问题的问题是,我不能发布实际代码,因为我必须签署一个协议,而且我是R的新人并且可能无法解释那么好,但也许有人可以帮助我...
我们说我有一些数据:
A B C D
F1 6.6 10 10
F1 3.1 10 10
A1 1.0 20 10
B1 3.4 20 20
因此,对于每个A,C和D值是相同的。 但是我想用dplyr找到Bmean就像这样:
A Bmean C D
F1 4,85 10 10
A1 1.0 20 10
B1 3.4 20 20
我该怎么做?我的想法是使用像
这样的东西dplyr::group_by(A) %>% dplyr::summarize(Bmean = mean(B))
但此操作后C和D似乎消失了。 group_by是否有意义保留所有列? 或者这将如何运作?
为了澄清,我想使用dplyr语法,因为如果可能的话,它是更大操作的一部分。
答案 0 :(得分:2)
你可以简单地使用这样的东西:
aggregate(cbind(B, C, D) ~ A, df, mean)
这里df是包含A,B,C和D列的数据框。
答案 1 :(得分:2)
您可以使用base R
aggregate(data=df1,B~.,FUN = mean)
答案 2 :(得分:1)
我们可以使用data.table
library(data.table)
setDT(df1)[,.(Bmean = mean(B)) , .(A, C, D)]
# A C D Bmean
#1: F1 10 10 4.85
#2: A1 20 10 1.00
#3: B1 20 20 3.40
答案 3 :(得分:0)
我想添加一个遮篷,专门解决dplyr的使用问题。我敢肯定,这样做的方式更优雅,但以下建议可以在汇总/汇总的数据框中保留带有其他描述性变量的列。同样,如果不是这种情况,该代码将无法保护您免受更大数据框中的错误的侵害。
以下代码删除C和D列
library(dplyr)
library(tibble)
df <- tribble(
~A , ~B , ~c , ~D ,
"F1", 6.6, 10 , 10 ,
"F1", 3.1, 10 , 10 ,
"A1", 1.0, 20 , 10 ,
"B1", 3.4, 20 , 20
)
以下代码删除C和D列
df %>%
group_by(A) %>%
summarise(Bmean = mean(B))
此代码保留C和D列。请注意,只有在组的每一行中都有相同的变量时,此方法才有效。但是,由于应该保留这些变量,并且不影响它们的分组行为,因此无论如何都是如此。
df %>%
group_by(A) %>%
summarise(Bmean = mean(B),
C = unique(C),
D = unique(D))