将行除以其列数而不使用NA值

时间:2017-06-15 17:52:12

标签: r dataframe row

我在b列的第一行中有一个包含单个NA的数据框:

a <- c(16.54868281, 47.64097026, 51.0773201)
b <- c(NA, 39.40217391, 13.04347826)
c <- c(17.80821918, 42.92237443, 36.75799087)
d <- c(22.90809328, 56.37860082, 61.04252401)
data <- data.frame(cbind(a, b, c, d))

data
         a        b        c        d
1 16.54868       NA 17.80822 22.90809
2 47.64097 39.40217 42.92237 56.37860
3 51.07732 13.04348 36.75799 61.04252

在这里,我试图获得每行的平均分数。但是,由于NA,第一行返回其平均值的NA。

safety <- data.frame(
  (data$a + data$b + data$c + data$d) / 4
  )
names(safety)[1] <- "safety"

safety
    safety
1       NA
2 46.58603
3 40.48033

要解决此问题,我已将NA替换为0.不幸的是,计算机将缺失值视为一个数字,并且我将每一行除以4.因此,我得到第一行的错误均值。 / p>

a <- c(16.54868281, 47.64097026, 51.0773201)
b <- c(NA, 39.40217391, 13.04347826)
c <- c(17.80821918, 42.92237443, 36.75799087)
d <- c(22.90809328, 56.37860082, 61.04252401)

data <- data.frame(cbind(a, b, c, d))
data[is.na(data)] <- 0

safety <- data.frame(
  (data$a + data$b + data$c + data$d) / 4
  )
names(safety)[1] <- "safety"

safety
    safety
1 14.31625
2 46.58603
3 40.48033

我需要第一行读取 19.08833 而不是 14.31625 。 R中是否有一个函数允许我将每一行除以其等式中的列数?我可能会为解决这个问题创造很长的路要走。但是,随着数据集变得越来越大,我的原始缺点很快就会结束。

1 个答案:

答案 0 :(得分:2)

rowMeansna.rm = TRUE

一起使用
rowMeans(data, na.rm = TRUE)
# [1] 19.08833 46.58603 40.48033