在数据框中使用ifelse获取过时值

时间:2016-05-12 16:09:56

标签: r if-statement dataframe

您好我正在根据优先级聚合两列中的值并创建最终的第三列。如果第1列中的值缺失或为NA,那么我将进入第2列。

df=data.frame(internal=c(1,5,"",6,"NA"),external=c("",6,8,9,10))

df
      internal external
1        1         
2        5        6
3                 8
4        6        9
5       NA       10

df$final <- df$internal
df$final <- ifelse((df$final=="" | df$final=="NA"),df$external,df$final)

df
      internal external  final
1        1                2
2        5        6       3 
3                 8       4
4        6        9       4
5       NA       10       2

当外部为8和2时,如何将第3行和第5行的最终值设为4和2.我不知道错误但是这些值不会产生任何问题对我有意义。

1 个答案:

答案 0 :(得分:2)

出现问题是因为R将您的值转换为因子。

您的代码可以正常使用

df=data.frame(internal=c(1,5,"",6,"NA"),external=c("",6,8,9,10),stringsAsFactors = FALSE)

PS:这种对因素的可怕转换应该属于R Inferno,http://www.burns-stat.com/pages/Tutor/R_inferno.pdf