添加多列在r中的数据框中包含na

问题描述 投票:0回答:3

我有这样的数据框:

enter image description here

我想通过在一行中有任何数值的情况下忽略NA来创建一个新列,该列为其他列的总和。但是,如果一行中的[[all value(如第二行)为na,则总和列将为NA

r dataframe sum transform multiple
3个回答
0
投票
假设您的数据帧称为df

cbind(df, apply(df, 1, sum, na.rm = T))

请注意,如果数据框中还有其他列,则需要将df中的apply调用限制为仅作为您要访问的列。    

0
投票
由于这是您在SO上的第一个活动,因此您应该看一下this,它描述了如何制作最少的和可重复的示例。如果您还有其他问题,将来肯定需要这样做。图像通常不作为起点。

幸运的是,您的桌子很小。我将其变成一个小三角形,然后使用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-06-15创建


0
投票
您可以在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))
© www.soinside.com 2019 - 2024. All rights reserved.