r - 创建一个应用多个条件的新列
问题描述
我想从我的 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")
解决方案
您还可以使用以下代码:
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
推荐阅读
- hadoop - 如何在 Windows 10 (Derby) 中初始化 Hive Metastore
- arrays - 基于数组元素 mongoDB 的组
- javascript - 如何在 Vue.Js 项目中使用交易视图图表小部件?
- reactjs - 如何在选择选项值时显示输入框?
- python - 变换/扭曲坐标
- google-maps - 将应用程序(地图、分析等)从 google play 迁移到华为应用程序库
- javascript - 通过jquery数据表中的主键进行数据排序
- verilog - 延迟计数器不增加?密克罗尼西亚联邦
- django - 我可以停止大量的 [Django] ERROR (EXTERNAL IP): Invalid HTTP_HOST header from 陌生网站吗?
- angular - 根据特定场景显示 div