在R中计算数据框中列中的零,并以百分比表示

6
我希望能够在 R 数据框中计算每列的零值数量,并将其表示为百分比。这个百分比应该添加到原始数据框的最后一行中。 例子:
x <- c(0, 4, 6, 0, 10)
y <- c(3, 0, 9, 12, 15)
z <- c(3, 6, 9, 0, 15)

data_a <- cbind(x,y,z)

希望看到每一列中的零并表示为百分比。
谢谢。
4个回答

14
x <- c(0, 4, 6, 0, 10)
y <- c(3, 0, 9, 12, 15)
z <- c(3, 6, 9, 0, 15)

data_a <- cbind(x,y,z)
#This is a matrix not a data.frame.    

res <- colSums(data_a==0)/nrow(data_a)*100

如果必须的话,可以使用rbind函数将向量添加到矩阵中(通常不是一个好主意)。


rbind(data_a, res)
#      x  y  z
#      0  3  3
#      4  0  6
#      6  9  9
#      0 12  0
#     10 15 15
# res 40 20 20

8

这里还有一种使用lapply的方法,但是只适用于数据框。

lapply(data_a, function(x){ length(which(x==0))/length(x)})

2
< p >结合prop.table和一些*apply操作,可以得到与@Roland相同的答案。

> prop <- apply(data_a, 2, function(x) prop.table(table(x))*100)
> rbind(data_a, sapply(prop, "[", 1))
      x  y  z
[1,]  0  3  3
[2,]  4  0  6
[3,]  6  9  9
[4,]  0 12  0
[5,] 10 15 15
[6,] 40 20 20

0

这可能不太优雅,但当我的列有缺失值时,我就是这样处理的:

#Returns the number of zeroes in a column
numZero <- colSums(vars == 0, na.rm = T)

#Returns the number of non-NA entries in each column
numNA <- colSums(is.na(vars))

#Returns total sample size
numSamp <- rep(nrow(vars), ncol(vars))

#Combine the three
varCheck <- as.data.frame(cbind(numZero, numNA, numSamp))

#Number of observations for that variable
varCheck$numTotal <- varCheck$numSamp - varCheck$numNA

#Percentage zero
varCheck$pctZero <- varCheck$numZero / varCheck$numTotal

#Check which have lower than 1%
varCheck[which(varCheck$pctZero > 0.99),]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接