基于R数据帧中的两个其他变量替换字符值

基于R数据帧中的两个其他变量替换字符值,r,R,我有一个大数据集,其中前两列与此类似: team year Arizona 2006 Arizona 2006 Arizona 2011 Oregon 2011 Oklahoma 2008 Colorado 2005 Colorado 2005 Colorado 2011 我想创建另一个基于团队和年度的团队会议变量。我在想类似于if(data$team=“亚利桑那州|俄勒冈|科罗拉多州”&year=2011){data$conf='Pac-12}的事情,但这不起作用,因为通常有

我有一个大数据集,其中前两列与此类似:

team year

Arizona 2006

Arizona 2006

Arizona 2011

Oregon 2011

Oklahoma 2008

Colorado 2005

Colorado 2005

Colorado 2011
我想创建另一个基于团队和年度的团队会议变量。我在想类似于
if(data$team=“亚利桑那州|俄勒冈|科罗拉多州”&year=2011){data$conf='Pac-12}
的事情,但这不起作用,因为通常有多行包含我要查找的团队和年份。这有意义吗


谢谢

如果您需要
ifelse

teams <- c("Arizona", "Oregon", "Colorado")

data$conf <- ifelse(data$team %in%  teams & data$year == 2011,
                     "Pac-12", "something else")
但由于条件很多,这很麻烦,因此您可能需要:

reference <- matrix(c(rep("Pac-12",3),rep("third answer",4),
                     "Second Answer",rep("fourth answer",8)), 
                    4, 4, 
                    dimnames=list(c("Arizona","Oregon", "Colorado", "Oklahoma"), 
                                  c("2011","2008","2006","2005") )
                    )

#> reference
#         2011           2008            2006            2005           
#Arizona  "Pac-12"       "third answer"  "fourth answer" "fourth answer"
#Oregon   "Pac-12"       "third answer"  "fourth answer" "fourth answer"
#Colorado "Pac-12"       "third answer"  "fourth answer" "fourth answer"
#Oklahoma "third answer" "Second Answer" "fourth answer" "fourth answer"


data$conf <- with( data, reference [ cbind(team,year) ] )
#    > data
#      team year          conf
#1  Arizona 2006 fourth answer
#2  Arizona 2006 fourth answer
#3  Arizona 2011        Pac-12
#4   Oregon 2011        Pac-12
#5 Oklahoma 2008 Second Answer
#6 Colorado 2005 fourth answer
#7 Colorado 2005 fourth answer
#8 Colorado 2011        Pac-12
参考
#         2011           2008            2006            2005           
#亚利桑那州“Pac-12”“第三个答案”“第四个答案”“第四个答案”
#俄勒冈州“Pac-12”“第三个答案”“第四个答案”“第四个答案”
#科罗拉多州“Pac-12”“第三个答案”“第四个答案”“第四个答案”
#俄克拉荷马州“第三个答案”“第二个答案”“第四个答案”“第四个答案”
数据$conf数据
#团队年会议
#1亚利桑那州2006年第四个答案
#2亚利桑那州2006年第四个答案
#3亚利桑那州2011年Pac-12
#4俄勒冈州2011年Pac-12
#5俄克拉荷马州2008第二答案
#6.第四项答覆
#7.第四项答覆
#8科罗拉多州2011年Pac-12

最后一种方法是使用data.frame版本的引用将事物合并到一起……我相信其他人可能会证明这一点。

或者,您可以通过直接子集进行合并:

data$conf <- rep(NA,nrow(data))
data$conf[(data$team == 'Arizona' | data$team == 'Oregon' | data$team == 'Colorado') & data$year == 2011]='PAC-12'

data$conf+1。通过执行
data$conf[data$team%in%c(“亚利桑那州”、“俄勒冈州”、“科罗拉多州”)&data$year==2011]FWIW,您仍然可以节省自己在这里的大量输入,因为我认为它比我的好。是的,当我运行它时,NAs实际上也没有被替换。谢谢@SimpleFish唯一的问题是我需要添加多个会议,因此else会替换我已经完成的其他会议。有没有办法让else什么都不做?如果我理解你的评论是正确的;您需要在ifelse语句中替换条件,以反映每个会议的参数。是的,因此ifelse非常适合创建一个会议,但当我创建另一个会议时,它将使用最近创建的条件替换我以前创建的会议。添加的多个ifelse语句可能是我所做工作的最佳解决方案。
data$conf <- rep(NA,nrow(data))
data$conf[(data$team == 'Arizona' | data$team == 'Oregon' | data$team == 'Colorado') & data$year == 2011]='PAC-12'