【发布时间】:2016-03-09 19:28:57
【问题描述】:
对于以下数据框:
df <- data.frame(name = c("July Doe", "John Doe", NA, "Jane Doe"),
age = c(NA, NA, NA, 43),
name1 = c(NA, NA, NA, "John Doe"),
age1 = c(NA, NA, NA, 37),
name2 = c(NA, NA, "July Doe", NA),
age2 = c(NA, NA, 7, NA))
提供:
name age name1 age1 name2 age2
1 July Doe NA <NA> NA <NA> NA
2 John Doe NA <NA> NA <NA> NA
3 <NA> NA <NA> NA July Doe 7
4 Jane Doe 43 John Doe 37 <NA> NA
当name 与name1 或name2 匹配时,我需要将age 更改为对应的age1 或age2。
到目前为止,我已经想出了这个(没有运气)。
df$age <- with(df, ifelse(is.na(df$age), ifelse(df$name %in% df$name1,
as.integer(df$age1), as.integer(df$age)), as.integer(df$age)))
如果任何高级 R 用户能解释一下,将不胜感激。我想保留剩余的 NA 并有类似的东西:
name age name1 age1 name2 age2
1 July Doe 7 <NA> NA <NA> NA
2 John Doe 37 <NA> NA <NA> NA
3 <NA> NA <NA> NA July Doe 7
4 Jane Doe 43 John Doe 37 <NA> NA
然后我可以处理删除只有 NA 的行和我不需要的列。
【问题讨论】: