【问题标题】:Set a value to a variable in accordance with another根据另一个变量设置一个值
【发布时间】:2015-04-15 09:00:46
【问题描述】:

当“M3_mortalite”变量等于 1 时,我想将值 6 设置为变量“M3_rankin_factor”。

  summary(M2clean$M3_rankin_factor)  
   0    1    2    3    4    5    6 NA's
 176   71   44   31   52   29    3   71 


  summary(M2clean$M3_mortalite)
Non  Oui NA's 
402   34   41 


  for (i in rownames(M2clean)) {if(!is.na(M2clean$M3_mortalite[i]) && M2clean$M3_mortalite == 1) M2clean$M3_rankin_factor[i] <- 6}


  summary(M2clean$M3_rankin_factor)
   0    1    2    3    4    5    6 NA's 
 176   71   44   31   52   29    3   71 

不明白

【问题讨论】:

  • 非常感谢,但它不起作用。我想保留 6 个类,并将这个公式重新编码为 2 个类:summary(M2clean$M3_rankin_factor) 1 2 NA's 402 34 41
  • 你能发布dput(M2clean)的结果吗?并查看reproducible-example
  • 这是一个大数据库:我可以从控制台中提取整个文本并粘贴到这里...我阅读了可重现的示例,谢谢。
  • str(M2clean)dput(head(M2clean)) 怎么样,所以我们对数据了解更多...

标签: r if-statement for-loop


【解决方案1】:

试试这个

M2clean$M3_rankin_factor[M2clean$M3_mortalite == 1] <- 6

【讨论】:

  • M3_rankin_factor 是一个因素,所以这不起作用。请参阅 OP 的评论。
  • 先转换成字符怎么样M2clean$M3_rankin_factor &lt;- as.character(M2clean$M3_rankin_factor)
【解决方案2】:

你可以使用

M2clean$M3_rankin_factor[which(M2clean$M3_mortalite==1)] <- 6

只要 1 和 6 是所涉及变量的有效因子水平。
使用 which 而不是 M2clean$M3_mortalite==1 可以避免 NA 问题。
我已经测试过了:它也适用于因子

f <- as.factor(c(NA,1,2,3))
#[1] <NA> 1    2    3
f[which(f==1)] <- 3
#[1] <NA> 3    2    3 

【讨论】:

    【解决方案3】:

    谢谢你,它有效。 另一个答案:

    M2clean[M2clean$M3_mortalite == "Oui" & (!is.na(M2clean$M3_mortalite)), "M3_rankin_factor"] <- 6
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-10
      • 2014-10-06
      • 2010-12-01
      • 1970-01-01
      • 2018-02-09
      • 2018-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多