除以它的列数行,而不的NA值

问题描述:

我有包含单个NA列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。因此,我得到一个错误的平均值为第一排。

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中有一个函数,它允许我将每行按其等式中的列数进行划分?我可以创建一个很长的路来解决这个问题。但是,随着数据集越来越大,我的原始缺陷很快就会迎刃而解。

使用rowMeansna.rm = TRUE

rowMeans(data, na.rm = TRUE) 
# [1] 19.08833 46.58603 40.48033 
+0

谢谢。 8分钟后,我会接受这个答案,当系统允许我:) –

+1

不客气。很高兴它有帮助。 – Psidom

+1

你是我的救星;真正做到。我不知道没有这个论坛我会做什么。 –