【问题标题】:create mean per row for every second column为每第二列创建每行的平均值
【发布时间】:2021-04-16 09:20:00
【问题描述】:

所以我要做的是为每一行创建一个平均值,但只包括每一列。一个例子 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 $&lt;-.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

任何帮助将不胜感激!

【问题讨论】:

  • 我更新了更多列

标签: r


【解决方案1】:

这是一个 dplyr 解决方案:

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

【讨论】:

  • 您好,感谢您的回答。所以我的实际数据框有更多的列,所以使用列名似乎效率不高。我相应地编辑了我的问题。您有什么想法吗,如何命令应该包含每一列?
【解决方案2】:

您可以将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 的意思?

【讨论】:

    【解决方案3】:

    如果我们离开 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
    

    【讨论】:

      【解决方案4】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-22
        相关资源
        最近更新 更多