【问题标题】:Filling NA by copying content of other rows in R通过复制R中其他行的内容来填充NA
【发布时间】:2012-11-16 09:34:51
【问题描述】:

我有一个类似于下表的数据集。我想要做的是将每个 ID 的 NA 替换为相应 ID 中的可用数据,除了我想要预测的结果变量。例如,对于 ID 1,我想要复制 1990 年到 1991、1992、1993 年的信息。对于 ID 2,我应该复制从 1992 年到 1990、1991 和 1993 年的信息。ID 代表一个集群,比如村庄。最终我想预测失踪年份的结果。我想在 R 中做到这一点。

   ID YeStart Author YEAR   Lat    Long Outome
     1    1990  Goroo 2012 23.45 -16.718     20
     1    1991   <NA>   NA    NA      NA     30
     1    1992   <NA>   NA    NA      NA     NA
     1    1993   <NA>   NA    NA      NA     NA
     2    1990   <NA>   NA    NA      NA      2
     2    1991   <NA>   NA    NA      NA     NA
     2    1992 Berthe 2012 20.45 -16.718     NA
     2    1993   <NA>   NA    NA      NA     NA
     3    1990   <NA>   NA    NA      NA     NA
     3    1991 Berthe 2012 40.45 -16.718     NA
     3    1992   <NA>   NA    NA      NA     NA
     3    1993   <NA>   NA    NA      NA     50

【问题讨论】:

  • 嘿@jonestats,你还没有接受你之前问题的答案。花点时间弄清楚。您只需单击要接受的答案旁边的复选标记。
  • 让我检查一下,现在就做。我昨天勾选了是表示它很有用,但我无法再次找到该选项。

标签: r duplicates na


【解决方案1】:

我很确定这个问题的答案已经在网站的某个地方了。但是您可以使用 mergecomplete.cases 函数来做到这一点。

d <- read.table(text="ID YeStart Author YEAR   Lat    Long Outome
     1    1990  Goroo 2012 23.45 -16.718     20
     1    1991   <NA>   NA    NA      NA     30
     1    1992  Goroo 2012 23.45 -16.718     NA
     1    1993   <NA>   NA    NA      NA     NA
     2    1990   <NA>   NA    NA      NA      2
     2    1991   <NA>   NA    NA      NA     NA
     2    1992 Berthe 2012 20.45 -16.718     NA
     2    1993   <NA>   NA    NA      NA     NA
     3    1990   <NA>   NA    NA      NA     NA
     3    1991 Berthe 2012 40.45 -16.718     NA
     3    1992   <NA>   NA    NA      NA     NA
     3    1993   <NA>   NA    NA      NA     50", header=TRUE)

d1 <- d[c('ID', 'YeStart', 'Outome')]
d2 <- d[! names(d) %in% c('Outome', 'YeStart')]
merge(d1, unique(d2[complete.cases(d2), ]))

#    ID YeStart Outome Author YEAR   Lat    Long
# 1   1    1990     20  Goroo 2012 23.45 -16.718
# 2   1    1991     30  Goroo 2012 23.45 -16.718
# 3   1    1992     NA  Goroo 2012 23.45 -16.718
# 4   1    1993     NA  Goroo 2012 23.45 -16.718
# 5   2    1990      2 Berthe 2012 20.45 -16.718
# 6   2    1991     NA Berthe 2012 20.45 -16.718
# 7   2    1992     NA Berthe 2012 20.45 -16.718
# 8   2    1993     NA Berthe 2012 20.45 -16.718
# 9   3    1990     NA Berthe 2012 40.45 -16.718
# 10  3    1991     NA Berthe 2012 40.45 -16.718
# 11  3    1992     NA Berthe 2012 40.45 -16.718
# 12  3    1993     50 Berthe 2012 40.45 -16.718

【讨论】:

  • 非常感谢它的完美运行。在哪里可以学到这些东西。你知道任何对我有用的参考资料吗?
  • 那里有很多教程。 Hadley Wickham 的 R 词汇表 (github.com/hadley/devtools/wiki/vocabulary) 是一个很好的起点。在那之后,我建议阅读 Patrick Burns 的书“R Inferno”。它是免费的,只需用谷歌搜索即可。
  • 嗨,我意识到如果一个集群有超过 2 年的数据,那么它会被复制两次。例如,如果集群 1 有 1990 年和 1992 年的数据,那么当我填写案例时,我将有 8 个集群 1 数据点,而不是正常的 4 个,所以我有 2 个 1990、2 1991、2 个 1992 和 2 个 1993。如果它3年,然后给12分。我该如何解决这个问题?
  • 非常感谢。问题解决了。也感谢您阅读的材料。我花一些时间来彻底检查它们。非常感谢您的支持。
猜你喜欢
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
  • 2021-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多