簡體   English   中英

r中的和NA值

[英]Sum NA values in r

我正在使用具有多個NA值的數據幀,因此我考慮根據其NA值對屬性進行排序。 我試圖使用for循環,這是我到目前為止:

> data <- read.csv("C:/Users/Nikita/Desktop/first1k.csv")
> for (i in 1:length(data) ) {
+ temp <- c(sum(is.na(data[i])))}
> temp
[1] 0

這是我第一次在r中使用for循環,所以我確信它只是一個愚蠢的語法問題,但我無法理解究竟是哪一個。

最終,我需要一個列表,顯示屬性的名稱及其NA計數。 這樣我就可以對列表進行排序並獲得所需的信息。 這是一些模擬數據,使其更容易。

data <- data.frame(A = c(500, 600, 700, 1000),
                   B = c(500, 600, 700, NA),
                   C = c(NA, NA, 500, 700),
                   D = c(800, NA, 933, NA),
                   E = c(NA, NA, NA, NA))

編輯:謝謝大家的幫助。 這三種解決方案都適合我。 我確實想知道是否有一行代碼在將它們導出到文件之前對這些屬性進行排序。 就像我之前提到的,我在r很新,所以我不確定它是否可能。

編輯2:當我運行sort時,會給出下一個錯誤:

temp <- sort(temp)
Error in sort.int(x, na.last = na.last, decreasing = decreasing, ...) : 
  'x' must be atomic

知道為什么嗎?

以下是使用is.nacolSums的快速答案:

colSums(is.na(data))

返回:

 A B C D E 
 0 1 2 2 4 

對於您的上述數據。

感謝@akrun顯示我的剩余apply

在R中執行迭代代碼的正確方法是避免顯式的for循環。 請改用apply (和公司)。 @jeremycg給了你正確的R-ish答案。 關於您的代碼,您應該進行一些編輯以使其工作。

temp <- c()
for (i in 1:length(data)){
    temp[names(data)[i]] <- sum(is.na(data[i]))
}

你不得不temp在每次迭代改寫。 此外,您沒有將變量的標簽寫入temp 因此,您看到的輸出是數據集最后一列中的NA數。

關於OP的編輯

temp <- sort(temp) # pass decreasing=T into arguments in case
                   # you want reversed order

這個答案顯示了如何使for循環工作。

temp <- vector(length = ncol(data))

for (i in 1:length(data)) {
   temp[i] <- c(sum(is.na(data[, i])))
}

names(temp) <- colnames(data)

temp
# A B C D E 
# 0 1 2 2 4

暫無
暫無

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

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