我有这样的数据:

如果一行中有任何数值,我希望创建一个新列,它是其他列的之和,方法是忽略NA。但是,如果在一行中所有值(如第二行)都是na,则sum列将得到NA。
发布于 2020-06-15 05:59:05
假设您的数据框架名为df
cbind(df, apply(df, 1, function(x){if (all(is.na(x))) {NA} else {sum(x, na.rm = T)}))请注意,如果您的数据框架有其他列,则需要将apply中的apply调用限制为您所追求的列。
发布于 2020-06-15 06:16:26
您可以在NA中计数df值。如果一行中没有非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))https://stackoverflow.com/questions/62382101
复制相似问题