【问题标题】:Dividing the total row in R by the number of full rows [duplicate]将R中的总行数除以完整行数[重复]
【发布时间】:2021-05-13 02:11:09
【问题描述】:

我有一个如下所示的数据集。我想用代码创建分数变量。

分数的计算;整行总数/整列数

例如,第 1 行的分数计算:(1+2+1) / 3 = 1.33

例如,第 2 行的分数计算:(1+1) / 2 = 1

df <- data.frame(
   X1 = c(1,1,2,3,NA), 
   X2 = c(2,1,NA,2,2), 
   X3 = c(1,NA,2,2,1),
   Skor=c(1.33,1,2,2.33,1.5)
)
df

> df
  X1 X2 X3 Skor
1  1  2  1 1.33
2  1  1 NA 1.00
3  2 NA  2 2.00
4  3  2  2 2.33
5 NA  2  1 1.50
> 

【问题讨论】:

    标签: r


    【解决方案1】:

    您实际上可以按行表示忽略 NA 值。

    df$Skor <- rowMeans(df, na.rm = TRUE)
    df
    
    #  X1 X2 X3     Skor
    #1  1  2  1 1.333333
    #2  1  1 NA 1.000000
    #3  2 NA  2 2.000000
    #4  3  2  2 2.333333
    #5 NA  2  1 1.500000
    

    数据

    假设您的数据中最初没有 Skor 列。

    df <- data.frame(
      X1 = c(1,1,2,3,NA), 
      X2 = c(2,1,NA,2,2), 
      X3 = c(1,NA,2,2,1),
    )
    

    【讨论】:

      【解决方案2】:

      使用apply():

      cols <- paste0('X', 1:3)
      
      df$Skor2 <- 
        apply(df[cols], 1, function(x) sum(x, na.rm = TRUE) / sum(!is.na(x)))
      df
      #   X1 X2 X3 Skor    Skor2
      # 1  1  2  1 1.33 1.333333
      # 2  1  1 NA 1.00 1.000000
      # 3  2 NA  2 2.00 2.000000
      # 4  3  2  2 2.33 2.333333
      # 5 NA  2  1 1.50 1.500000
      

      【讨论】:

        【解决方案3】:

        你可以使用addmargins:

        addmargins(as.matrix(df[,-4]), 2, list(Skor=function(x) mean(x, na.rm=TRUE)))
        #     X1 X2 X3     Skor
        #[1,]  1  2  1 1.333333
        #[2,]  1  1 NA 1.000000
        #[3,]  2 NA  2 2.000000
        #[4,]  3  2  2 2.333333
        #[5,] NA  2  1 1.500000
        

        【讨论】:

          【解决方案4】:

          Ronak ShahrowMeans 方法已经非常简洁了,这是另一种选择

          df$Skor <- rowSums(df,na.rm = TRUE)/rowSums(!is.na(df))
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-04-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-09-21
            • 2019-11-27
            • 1970-01-01
            相关资源
            最近更新 更多