用R中的因子循环

时间:2011-01-27 21:59:18

标签: r loops

因此,此代码根据因子Bone的值填充向量bonegrp的值。我想以更简洁的方式实现这一目标。

谢谢!

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.  

2 个答案:

答案 0 :(得分:6)

如果Bonegrp中只有12个级别,那么您可以看到它是否有效(根据有关数据结构的其他信息进行编辑):

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

它基本上是使用向量并根据Bonegrp的数字等价物查找正确的字符串。您真的应该 提供有关数据的更多信息。提供的代码通常是不够的。

答案 1 :(得分: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')