簡體   English   中英

在 r 中添加多列包括 dataframe 中的 na

[英]adding multiple columns include na in dataframe in r

我有這樣的 dataframe :

在此處輸入圖像描述

如果一行中有任何數值,我想通過忽略NA創建一個新列,該列是其他列的總和。 但是,如果一行中的所有值(如第二行)都是 na,則 sum 列將獲得NA

假設您的數據框稱為 df

cbind(df, apply(df, 1, function(x){if (all(is.na(x))) {NA} else {sum(x, na.rm = T)}))

請注意,如果您的數據框有其他列,則需要將df調用限制為僅apply於您所追求的列。

由於這是您在 SO 上的第一個活動,您應該看一下它,它描述了如何制作最小且可重現的示例。 如果您有更多問題,將來肯定需要這樣做。 通常不接受圖像作為起點。

幸好你的桌子很小。 我把它變成了一個 tribble,然后使用rowSums來計算你想要的數字。

df <- tibble::tribble(
  ~x, ~y, ~z,
  6000, NA, NA,
  NA, NA, NA,
  100, 7000, 1000,
  0, 0, NA
)

df$sum <- rowSums(df, na.rm = T)
df
#> # A tibble: 4 x 4
#>       x     y     z   sum
#>   <dbl> <dbl> <dbl> <dbl>
#> 1  6000    NA    NA  6000
#> 2    NA    NA    NA     0
#> 3   100  7000  1000  8100
#> 4     0     0    NA     0

reprex package (v0.3.0) 於 2020 年 6 月 15 日創建

您可以計算df中的NA值。 如果連續沒有非NA值,您可以將 output 分配為NA或使用rowSums計算逐行總和。

ifelse(rowSums(!is.na(df)) == 0, NA, rowSums(df, na.rm = TRUE))
#[1]  6000    NA 10000  8100     0

數據

df <- structure(list(x = c(6000, NA, 10000, 100, 0), y = c(NA, NA, 
NA, 7000, 0), z = c(NA, NA, NA, 1000, NA)), class = "data.frame", 
row.names = c(NA, -5L))

暫無
暫無

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

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