【发布时间】:2020-06-15 05:51:33
【问题描述】:
【问题讨论】:
-
df$col <- rowSums(df, na.rm = TRUE)
【问题讨论】:
df$col <- rowSums(df, na.rm = TRUE)
由于这是您在 SO 上的第一个活动,您应该查看this,它描述了如何制作最小且可重复的示例。如果您有更多问题,将来肯定需要这样做。通常不接受图像作为起点。
幸运的是,您的桌子很小。我把它变成了一个 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
cbind(df, apply(df, 1, function(x){if (all(is.na(x))) {NA} else {sum(x, na.rm = T)}))
请注意,如果您的数据框有其他列,您需要将 apply 中的 df 调用限制为仅是您之后的列。
【讨论】:
您可以计算df 中的NA 值。如果连续没有非NA 值,您可以将输出分配为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))
【讨论】: