【问题标题】:Looping with A Factor in R在 R 中使用 A 因子循环
【发布时间】:2011-01-27 21:59:17
【问题描述】:

所以这段代码根据因子bonegrp的值填充向量Bone的值。我想以更简洁的方式完成此任务。

谢谢!

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.  

【问题讨论】:

    标签: r loops


    【解决方案1】:

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

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

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

    【讨论】:

    • 这绝对有效。非常感谢。我不完全确定为什么,但我稍后会弄清楚!
    • 哎呀...实际上那行不通。数据是来自“Sleuth2”包的 ex0523。基本上我希望 Bone 是长度为 52 的向量,其条目根据“Bonegrp”的相应条目的值
    • 将 [ ] 运算符想象成机关枪的射击室,每个 dat$Bonegrp 实例都会根据穿过[]-chamber。是的,我知道。触发快乐的美国人。嘿,我什至没有枪 :-)
    • @Michael & @Dwin - 上面的代码“不起作用”,因为 1. 在关闭 c() 和 2 之前缺少括号,仅列出 11 根骨头...上面的代码,Michael 从“Bone2​​”开始,所以你可以用 NA 或任何合适的东西来填充,一切都应该对齐。否则,代码将按预期工作并执行您想要的操作。
    • 太棒了!谢谢你们的帮助。 Bone1 应该用于“Rib”....所以 [] 运算符正在获取 dat$Bonegrp 的数值并从 c() 列表中分配适当的值?
    【解决方案2】:
    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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-23
      • 1970-01-01
      • 2015-04-14
      • 2017-07-15
      • 2014-02-20
      • 2017-04-20
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多