r-根据空值条件将同一数据帧中的两列合并为新列



这是我的数据:

colA    colB  
1       NA
2       3
3       4
4       NA

我想做的是使用这两列,我想创建一个新列,将每个列的值组合起来。它将从B列中获取所有值,但在出现空值的情况下,它将从a列中获取值。输出将如下所示:

colA   colB   newColumn
1      NA     1
2      3      3
3      4      4
4      NA     4

到目前为止,我的代码看起来是这样的,但它破坏了RStudio。当我在这里打出我的问题时,它实际上仍然在运行:

for(i in 1:length(data$colB)){
if(is.na(data$colB[i])){
data$newColumn <- data$colA}
else{
data$newColumn <- data$colB
}
}

因此假设您的数据如下:

options(stringsAsFactors = FALSE)
df1 <- read.table(text = "colA    colB  
1       NA
2       3
3       4
4       NA",header=1)

使用ifelse:解决问题的一行代码

df1$newColumn <- ifelse(is.na(df1$colB), df1$colA, df1$colB)

而您的错误是因为您需要对替换项进行索引,所以您应该在else语句中使用data$newColumn[i] <- data$colA[i]而不是data$newColumn <- data$colA。但最好使用矢量化函数,如ifelse

函数dplyr::coalesce是这类操作的简写。它适用于多个向量,所以如果您有一个colC,它可能也有值要输入,您可以将其添加到调用中。您按优先级顺序提供向量,因此它将返回它看到的第一个非NA值。
data <- data.frame(
colA = 1:4,
colB = c(NA_integer_, 3L, 4L, NA_integer_)
)
data$new_column <- dplyr::coalesce(data$colB, data$colA)
data
#>   colA colB new_column
#> 1    1   NA          1
#> 2    2    3          3
#> 3    3    4          4
#> 4    4   NA          4

最新更新