2011-01-27 67 views
0

因此,此代码根据因子bonegrp的值填充向量Bone的值。我想以更简洁的方式来完成此任务。在R中使用因子循环

谢谢!

v <- dat$bonegrp=="Bone2" 
Bone[v] <- "Gast 1" 
v <- dat$Bonegrp=="Bone3" 
Bone[v] <- "Gast 2" 
v <- dat$Bonegrp=="Bone4" 
Bone[v] <- "Vert1" 
v <- dat$Bonegrp=="Bone5" 
Bone[v] <- "Vert2" 
v <- dat$Bonegrp=="Bone6" 
Bone[v] <- "Femur" 
v <- dat$Bonegrp=="Bone7" 
Bone[v] <- "Tibia" 
v <- dat$Bonegrp=="Bone8" 
Bone[v] <- "Meta." 
v <- dat$Bonegrp=="Bone9" 
Bone[v] <- "Phal." 
v <- dat$Bonegrp=="Bone10" 
Bone[v] <- "PCau." 
v <- dat$Bonegrp=="Bone11" 
Bone[v] <- "MCau." 
v <- dat$Bonegrp=="Bone12" 
Bone[v] <- "DCau. 

回答

6

如果只有12 Bonegrp水平,那么你可以看到,如果这个工程(每关于数据结构的附加信息编辑):

Bone <- c(NA, "Gast 1", "Gast 2", "Vert1", "Vert2", "Femur","Tibia", "Meta.", 
      "Phal.", "PCau.", "MCau.", "DCau.")[as.numeric(dat$Bonegrp)] 

它基本上是使用矢量和查找正确的字符串基于Bonegrp的等效数字。你真的应该提供了关于你的数据的更多信息。只提供代码通常是不够的。

+0

这绝对有效。非常感谢。我不完全确定为什么,但我会在以后解决这个问题! – Michael 2011-01-27 22:55:00

3
match=data.frame(bonegrp=c('Bone2','Bone3','Bone24','Bone5','Bone6','Bone7','Bone8','Bone9','Bone10','Bo 
ne11','Bone12'),type=c('Gast 1','Gast 1','Vert1','Vert2','Femur','Tibia','Meta.','Phal','Pcau.','Mcau.','DCau')) 

new_data=merge(dat,match,by='bonegrp')