4

我想计算 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

4 回答 4

12
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
于 2013-09-23T12:18:28.237 回答
7

这是使用 lapply 的另一种方法,但这适用于数据框。

lapply(data_a, function(x){ length(which(x==0))/length(x)})
于 2016-08-18T06:57:18.677 回答
2

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
于 2013-09-23T12:29:27.143 回答
0

这可能是不优雅的,但当我的专栏有 NA 时,我就是这样做的:

#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),]
于 2020-07-30T13:16:54.413 回答