用新列替换数据框中的多个列,该新列指示原始列是否包含任何非缺失数据

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

我有一个类似于下面简化的数据框。我希望用新列 (new_column) 替换 A:C 列,该新列为有数据的行提供 1,为没有数据的行提供 NA。

A  B  C
NA NA NA
1  0  0
0  1  0
0  0  1

结果看起来像这样:

new_column
NA
1
1
1

我尝试在 dplyr 中使用 mutate 命令

library(dplyr)

df %>%
  mutate(new_column = apply(is.na(df[, c("A","B","C")]), 1, all),
         .keep = "unused",
         .before = "D" ) # where D is the next column in the data frame
r dataframe dplyr na
2个回答
1
投票

请尝试以下代码

library(tidyverse)

data %>% mutate(new=ifelse(!is.na(rowSums(across(c(A:C)))),1,NA))


   A  B  C new
1 NA NA NA  NA
2  1  0  0   1
3  0  1  0   1
4  0  0  1   1
5  0  0  0   1

基本 r 方法

data$new_column <- ifelse(rowSums(is.na(data)) == ncol(data), NA, 1)

0
投票

您可以使用

if_all()
+
is.na
:

library(dplyr)

df %>%
  mutate(new_column = if_else(if_all(A:C, is.na), NA_real_, 1),
         .keep = "unused")

#   new_column
# 1         NA
# 2          1
# 3          1
# 4          1

数据
df <- structure(list(A = c(NA, 1, 0, 0), B = c(NA, 0, 1, 0), C = c(NA, 
0, 0, 1)), class = "data.frame", row.names = c(NA, -4L))
© www.soinside.com 2019 - 2024. All rights reserved.