r - 创建一个包含列名称的新变量,以防值不为 NA

标签 r dataframe dplyr tibble data-wrangling

假设我有以下数据集:

data = tibble::tibble(
  id = c("x", "y", "x"),
  inputA = c(1, NA, NA),
  inputB = c(2, 1, NA),
  inputC = c(3, 2, 3)
)

看起来像这样:

# A tibble: 3 x 4
  id    inputA inputB inputC
  <chr>  <dbl>  <dbl>  <dbl>
1 x          1      2      3
2 y         NA      1      2
3 x         NA     NA      3

我想为每个 id(每个唯一行)创建一个变量,用于标识 id 具有哪些输入。我的意思是,如果输入变量不丢失(NA),新变量应该指示 id 有什么输入。

所需的输出应如下所示:

# A tibble: 3 x 5
  id    inputA inputB inputC inputs              
  <chr>  <dbl>  <dbl>  <dbl> <chr>               
1 x          1      2      3 inputA-inputB-inputC
2 y         NA      1      2 inputB-inputC       
3 x         NA     NA      3 inputC   

我要创建的变量是inputs

最佳答案

dplyr中使用rowwise:

library(dplyr)

cols <- names(data)[-1]

data %>%
  rowwise() %>%
  mutate(inputs = paste0(cols[!is.na(c_across(all_of(cols)))], collapse = '-'))

#   id    inputA inputB inputC inputs              
#  <chr>  <dbl>  <dbl>  <dbl> <chr>               
#1 x          1      2      3 inputA-inputB-inputC
#2 y         NA      1      2 inputB-inputC       
#3 x         NA     NA      3 inputC              

以 R 为基数:

data$inputs <- apply(!is.na(data[cols]), 1, function(x) 
                     paste0(cols[x], collapse = '-'))

关于r - 创建一个包含列名称的新变量,以防值不为 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67030880/

相关文章:

r - 使用 "{{"运算符通过环境变量隧道数据变量

javascript - 在 R shiny 中加载页面时调用 javascript 函数

按行删除数据框中的重复元素

python - 仅外部加入 python pandas

python - 在数据框中创建变量作为另一个数据框中其他变量和值的函数的快速方法?

python - 将只有一列的 Pandas 数据框转换为一维列表

r - 将数据帧转换为 R 中一列的长格式

python - R 相当于 Python 的 dask

html - 在 R 中清理 HTML 数据

将多个 NA 值替换为来自不同列组的正确值