我正在研究一个大型数据集,其示例如下所示:
Df1 <- data.frame(ID = c(1:7),
home_pc = c("VB2 4RF","CB4 2DT", "NE5 7TH", "BY5 8IB", "DH4 6PB","MP9 7GH","KN4 5GH"),
start_pc = c(NA,"Home", "FC5 7YH","Home", "CB3 5TH", "BV6 5PB",NA),
end_pc = c(NA,"CB5 4FG","Home","Home","Home","GH6 8HG",NA))
我想做两件事:
如何最好地解决这个问题 - 任何人都可以给我任何想法如何最好地做到这一点?
非常感谢。
答案 0 :(得分:1)
好的,这是一个起点 - 其他人肯定会给你更精细的答案。
首先,摆脱NA值:
Df1 <- na.omit(Df1)
这将完成data.frame
对象
第二次,替换开始和结束列。尝试使用矢量化的ifelse()
函数:
Df1 <- within(Df1,
{
start_pc <- ifelse(start_pc == 'Home', home_pc, start_pc)
end_pc <- ifelse(end_pc == 'Home', home_pc, end_pc)
})
希望我能正确理解你的问题!一些其他评论:如果您想证明某些内容是否为NA(例如在ifelse()
函数内),请使用is.na()
,相反的是!is.na()
。您也可以使用以下方法构建数据框的子集:例如subset(Df1, !is.na(home_pc))
应该有效。当然,如果您需要更多提示,请查看所有这些功能的帮助文件:?ifelse
或?subset
等。