首页 > 解决方案 > 创建一个应用多个条件的新列

问题描述

我想从我的 data.frame 中的其他现有列创建一个新列

例如,假设我有 3 列:a、b、c

a <- c(1,0,0,0,1) 
b <- c(0,1,0,0,0)
c <- c(0,0,1,1,0)

我想通过使用开始查看a列的条件创建一个名为“Category”的新列,如果a = 1则“A”如果a = 0则转到b列,如果b = 1则“B”如果b =0 然后转到 c 列,如果 c=1 则“C”。要知道的重要一点是,我的实际数据如果有一列包含 1,则其他两列自动为 0。或者也许用一个函数来做这件事更简单?

所以我想要如下结果:

Category <- c("A","B","C","C","A")

标签: r

解决方案


您还可以使用以下代码:

library(dplyr)
library(tidyr)
library(stringr)
library(purrr)

a <- c(1,0,0,0,1) 
b <- c(0,1,0,0,0)
c <- c(0,0,1,1,0)

df <- tibble(a, b, c)

df %>%
  mutate(Category = pmap(list(a, b, c), ~ names(df)[c(...) == 1])) %>%
  unnest(cols = "Category") %>%
  mutate(Category = str_to_upper(Category))

# A tibble: 5 x 4
      a     b     c Category
  <dbl> <dbl> <dbl> <chr>   
1     1     0     0 A       
2     0     1     0 B       
3     0     0     1 C       
4     0     0     1 C       
5     1     0     0 A


推荐阅读