簡體   English   中英

列的 R 中 Zeros 和 NA 的行計數

[英]Row wise count of Zeros' and NA in R for Columns

我想找到關於數據框中零和 NA 數量的行數,例如只有 1 列中有零的行數等。

df 的代碼在下面,需要找到從 M1 到 M5 的列

Zeros 和 NA 需要 O/P,下面提供了所需 O/P 的鏈接 https://imgur.com/y9qeyhV

id <- 1:9
M1 <- c(0,NA,1,0,0,NA,NA,1,7)
M2 <- c(NA,NA,0,NA,0,NA,NA,1,7)
M3 <- c(1,NA,0,0,0,1,NA,1,7)
M4 <- c(0,NA,0,3,0,NA,NA,1,7)
M5 <- c(5,0,0,NA,0,0,NA,0,NA)
data <- cbind(id,M1,M2,M3,M4,M5)
data <- as.data.frame(data)

所需 Output:

在此處輸入圖像描述

試試這個

table(rowSums(is.na(data)))

# 0 1 2 3 4 5 
# 3 2 1 1 1 1 

table(factor(rowSums(data == 0, na.rm = T), levels = 0:5))

# 0 1 2 3 4 5 
# 2 3 2 0 1 1 

您還可以將上面的代碼傳遞給data.frame()as.data.frame()以獲取data.frame object,就像您預期的 output 顯示的那樣。

對於北美:

data.frame(table(rowSums(is.na(data[startsWith(names(data),"M")]))))
  Var1 Freq
1    0    3
2    1    2
3    2    1
4    3    1
5    4    1
6    5    1

對於零

data.frame(table(factor(rowSums(0==data[startsWith(names(data),"M")],TRUE),0:5)))
  Var1 Freq
1    0    2
2    1    3
3    2    2
4    3    0
5    4    1
6    5    1

我的解決方案有點復雜,但它使用apply函數給出了所需的 output:

myFun <- function(data, count, fun) {
  applyFun <- function(x) {
    length(which(
      apply(data, 1, function(y) length(which(fun(y))) == x)
    ))
  }
  sapply(count, applyFun)
}
myFun(data, 0:5, is.na)
myFun(data, 0:5, function(x) x == 0)

(您在示例中犯了一個錯誤:兩行在任何列中都沒有零:第 7 行和第 9 行。)

apply(data, 1, function(x) length(x[is.na(x)]))

這會給你一個向量。 每個元素對應一行,其值是該行中 NA 元素的數量。

這是一個 for 循環選項,用於計算每行中的 NA 和零,然后使用dplyr::count來匯總每個值的頻率。

data$CountNA<-NA
for (i in 1:nrow(data)){
  data[i,"CountNA"]<-length(which(is.na(data[i,1:(ncol(data)-1)])))}
count(data, CountNA)

data$CountZero<-NA
for (i in 1:nrow(data)){
  data[i,"CountZero"]<-length(which((data[i,1:(ncol(data)-2)]==0)))}
count(data, CountZero)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM