为每第二列创建每行的平均值

时间:2021-04-16 09:20:00

标签: r

所以我想要做的是为每一行创建一个平均值,但只包括每隔一列。一个示例 df 是:

C1<-c(3,2,4,4,5)
C2<-c(3,7,3,4,5)
C3<-c(5,4,3,6,3)
C4<-c(5,4,3,6,3)
C5<-c(5,6,3,6,2)
C6<-c(5,5,3,6,4)
C7<-c(5,6,3,6,1)
C8<-c(5,7,3,6,2)
DF<-data.frame(ID=c("A","B","C","D","E"),C1=C1,C2=C2,C3=C3, C4=C4, C5=C5, C6=C6, C7=C7, C8=C8)

 DF
  ID C1 C2 C3 C4 C5 C6 C7 C8
1  A  3  3  5  5  5  5  5  5
2  B  2  7  4  4  6  5  6  7
3  C  4  3  3  3  3  3  3  3
4  D  4  4  6  6  6  6  6  6
5  E  5  5  3  3  2  4  1  2

所以现在我想计算 C2、C4、C6 和 C8 的平均值并将其添加为 df 中的一个新列。我试过的是这样的:

DF$mean <- rowMeans(DF[seq(2, nrow(dat_all_b), 2),])

这是产生的错误:“Fehler in $<-.data.frame(*tmp*, frequency_mean, value = c(350 = NA, : 替换有 14 行,数据有 30" 费勒 = 错误

我的实际 df 有更多的列,我想计算每隔一列的平均值。 预期输出:

 DF
  ID C1 C2 C3 C4 C5 C6 C7 C8 mean_1
1  A  3  3  5  5  5  5  5  5   4,5
2  B  2  7  4  4  6  5  6  7   5,75
3  C  4  3  3  3  3  3  3  3    3
4  D  4  4  6  6  6  6  6  6    5,5
5  E  5  5  3  3  2  4  1  2   3,5

任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:1)

这是一个 dplyr 解决方案:

library(tidyverse)
DF %>% 
rowwise() %>%
mutate(mean = mean(c(C1, C2), na.rm=TRUE))

答案 1 :(得分:0)

您可以将 rowMeans 用于每第二列:

DF$mean_1 <- rowMeans(DF[seq(3, ncol(DF), 2)], na.rm = TRUE)
DF

#  ID C1 C2 C3 C4 C5 C6 C7 C8 mean_1
#1  A  3  3  5  5  5  5  5  5   4.50
#2  B  2  7  4  4  6  5  6  7   5.75
#3  C  4  3  3  3  3  3  3  3   3.00
#4  D  4  4  6  6  6  6  6  6   5.50
#5  E  5  5  3  3  2  4  1  2   3.50

这给出了 C2C4C6C8 的平均值。我不确定您是否需要另一列名为 mean_2 的列,它表示 C1C3C5C7 的平均值?

答案 2 :(得分:0)

如果我们离开 ID 列,这将为您提供每个偶数列的平均值。

DF$mean_1 <- rowMeans(DF[(seq_along(DF)[(seq_along(DF) %% 2 == 1)])][-1])

  ID C1 C2 C3 C4 C5 C6 C7 C8 mean_1
1  A  3  3  5  5  5  5  5  5   4.50
2  B  2  7  4  4  6  5  6  7   5.75
3  C  4  3  3  3  3  3  3  3   3.00
4  D  4  4  6  6  6  6  6  6   5.50
5  E  5  5  3  3  2  4  1  2   3.50

答案 3 :(得分:0)

我建议研究一下应用系列。 在这种情况下,通过使用 apply 并将边距设置为 1(按行 - 而将其设置为 2 将为您提供按列的平均值)将解决问题。

DF$mean <- apply(DF[,2:ncol(DF)], 1, mean)

请注意,这更加灵活,因为您还可以快速适应许多其他情况。例如,要按行获取最大值,您可以按行将 max 函数应用于数据帧:

DF$max <- apply(DF[,2:ncol(DF)], 1, max)
相关问题