首页 > 解决方案 > 根据其他两个变量在数据框中创建一个新变量

问题描述

我有一个大数据框,想创建一个依赖于其他两个变量的新变量。

这是一个简短的例子:

v1 <- rep(c(1:5),each=3)
v2 <- c('X','A','Y','X','Y','B','X','Y','C','X','Y','C','X','Y','A')

dat <- data.frame(v1,v2)

#create a new var which contains either A,B, or C depending on what is found in v2  


#desired output
v3 <- rep(c('A','B','C','C','A'),each=3)
data.frame(v1,v2,v3)

关于如何使用短代码执行此操作的任何想法?

我试过这个,但它远非解决方案。遗漏太多。:(

dat$v3[dat$v2 %in% c('A','B','C')] <- dat$v2[dat$v2 %in% c('A','B','C')]

标签: r

解决方案


library(tidyverse)
dat %>% group_by(v1) %>% mutate(v3 = intersect(v2, c("A", "B", "C")))
# A tibble: 15 x 3
# Groups:   v1 [5]
#       v1 v2    v3   
#    <int> <fct> <chr>
#  1     1 X     A    
#  2     1 A     A    
#  3     1 Y     A    
#  4     2 X     B    
#  5     2 Y     B    
#  6     2 B     B    
#  7     3 X     C    
#  8     3 Y     C    
#  9     3 C     C    
# 10     4 X     C    
# 11     4 Y     C    
# 12     4 C     C    
# 13     5 X     A    
# 14     5 Y     A    
# 15     5 A     A    

这是假设只有 A、B、C 中的一个可以出现在由 给出的组中v1


推荐阅读