替换R中的值

时间:2012-02-02 10:33:48

标签: r

我正在研究一个大型数据集,其示例如下所示:

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))

我想做两件事:

  1. 首先,删除“start_pc”和“end_pc”列中包含NA的行。
  2. 当在“start_pc”或“end_pc”列中写入“Home”时,我希望能够将其替换为“home_pc”中的邮政编码。
  3. 如何最好地解决这个问题 - 任何人都可以给我任何想法如何最好地做到这一点?

    非常感谢。

1 个答案:

答案 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等。