【问题标题】:filling NA values in data frame with values common based on unique id [closed]用基于唯一ID的通用值填充数据框中的NA值[关闭]
【发布时间】:2013-09-24 04:38:22
【问题描述】:

我有一个大数据框,其中一部分看起来像这样:

   id carbon nitrogen sulfer
1   1     NA       NA     NA
2   1     NA       NA     NA
3   1      5        6     78
4   2     NA       NA     NA
5   2     NA       NA     NA
6   2      8        8     67
7   3     NA       NA     NA
8   3     NA       NA     NA
9   3     NA       NA     NA
10  3      7        9     55

有没有一种方法可以填充列中的NA 值(例如碳),其中一个值与 id 相同。例如,如果我们取id == 1,那么对于列碳的值为 5,需要将NA 替换为 5。 我有近 200 列要像这样填充。

非常感谢任何自动化此操作的帮助。

【问题讨论】:

  • 另外,在每一行你要么到处都有NA,要么没有,这是巧合吗?
  • 好的。我正在尝试为缺失值填充数据框。所以每个都是风景中的一个位置(唯一的 id)。因此,对于该唯一 ID,3 列的值相同
  • 问题很明确。对于每个 id,每列都有一个唯一的非 NA 值。或者可能更多,但所有值都相同。而且职位应该是冷漠的。

标签: r


【解决方案1】:

您还没有真正澄清@flodel 在他的 cmets 中指出的问题。无论如何,鉴于您的示例数据中的模式,即碳氮硫的所有值都丢失了,除了 每个 id 中的最后一个,那么您可以试试这个:

library(zoo)
na.locf(df, na.rm = FALSE, fromLast = TRUE)

#    id carbon nitrogen sulfer
# 1   1      5        6     78
# 2   1      5        6     78
# 3   1      5        6     78
# 4   2      8        8     67
# 5   2      8        8     67
# 6   2      8        8     67
# 7   3      7        9     55
# 8   3      7        9     55
# 9   3      7        9     55
# 10  3      7        9     55

【讨论】:

【解决方案2】:

试试这个,我希望它是你需要的。如果不更新,我会更新结果。顺便说一句,这个问题已经被问过几次了。

myFunc <- function(value) {
  if (value[1] == 1) {
    value[2] = 5;
    value[3] = 5;
    value[4] = 5 
  }
  # here you put you're if's
}

apply(data, 1, myFunc)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 2018-02-26
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多