r 逐行获取 n 列的平均值
r get mean of n columns by row
我有一个简单的data.frame
> df <- data.frame(a=c(3,5,7), b=c(5,3,7), c=c(5,6,4))
> df
a b c
1 3 5 5
2 5 3 6
3 7 7 4
是否有一种简单有效的方法来获得具有相同行数但均值为例如 a 列和 b 列的新 data.frame?像这样:
mean.of.a.and.b c
1 4 5
2 4 6
3 7 4
仅对前两列使用 rowMeans()
。然后cbind()
到第三列。
cbind(mean.of.a.and.b = rowMeans(df[-3]), df[3])
# mean.of.a.and.b c
# 1 4 5
# 2 4 6
# 3 7 4
注意:如果您的原始数据中有任何 NA 值,您可能需要在 rowMeans()
中使用 na.rm = TRUE
。有关更多信息,请参阅 ?rowMeans
。
另一个使用 dplyr
包的选项:
library("dplyr")
df %>%
rowwise()%>%
mutate(mean.of.a.and.b = mean(c(a, b))) %>%
## Then if you want to remove a and b:
select(-a, -b)
我认为最好的选择是使用由 Richard Scriven 编辑的 rowMeans()
post。 rowMeans 和 rowSums 等同于将 apply 与 FUN = mean 或 FUN = sum 一起使用,但速度要快得多。我post带apply的版本仅供参考,以防我们想传递另一个功能。
data.frame(mean.of.a.and.b = apply(df[-3], 1, mean), c = df[3])
输出:
mean.of.a.and.b c
1 4 5
2 4 6
3 7 4
使用 SQL 和 sqldf
非常冗长
library(sqldf
sqldf("SELECT (sum(a)+sum(b))/(count(a)+count(b)) as mean, c
FROM df group by c")
输出:
mean c
1 7 4
2 4 5
3 4 6
我有一个简单的data.frame
> df <- data.frame(a=c(3,5,7), b=c(5,3,7), c=c(5,6,4))
> df
a b c
1 3 5 5
2 5 3 6
3 7 7 4
是否有一种简单有效的方法来获得具有相同行数但均值为例如 a 列和 b 列的新 data.frame?像这样:
mean.of.a.and.b c
1 4 5
2 4 6
3 7 4
仅对前两列使用 rowMeans()
。然后cbind()
到第三列。
cbind(mean.of.a.and.b = rowMeans(df[-3]), df[3])
# mean.of.a.and.b c
# 1 4 5
# 2 4 6
# 3 7 4
注意:如果您的原始数据中有任何 NA 值,您可能需要在 rowMeans()
中使用 na.rm = TRUE
。有关更多信息,请参阅 ?rowMeans
。
另一个使用 dplyr
包的选项:
library("dplyr")
df %>%
rowwise()%>%
mutate(mean.of.a.and.b = mean(c(a, b))) %>%
## Then if you want to remove a and b:
select(-a, -b)
我认为最好的选择是使用由 Richard Scriven 编辑的 rowMeans()
post。 rowMeans 和 rowSums 等同于将 apply 与 FUN = mean 或 FUN = sum 一起使用,但速度要快得多。我post带apply的版本仅供参考,以防我们想传递另一个功能。
data.frame(mean.of.a.and.b = apply(df[-3], 1, mean), c = df[3])
输出:
mean.of.a.and.b c
1 4 5
2 4 6
3 7 4
使用 SQL 和 sqldf
library(sqldf
sqldf("SELECT (sum(a)+sum(b))/(count(a)+count(b)) as mean, c
FROM df group by c")
输出:
mean c
1 7 4
2 4 5
3 4 6