基于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'