根据其他两个变量在数据框中创建一个新变量

时间:2018-11-23 10:45:39

标签: r

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

这是一个简短的示例:

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')]

1 个答案:

答案 0 :(得分:2)

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    

这是假设v1给定的组中只能出现A,B,C中的一个。