【问题标题】:Replacing NA with duplicates from adjacent row R [duplicate]用相邻行 R 中的重复项替换 NA [重复项]
【发布时间】:2016-09-16 17:24:41
【问题描述】:

我有一个包含特征 DateAgeCustomer_ID 的数据集。 Age 中的某些行中有缺失值 (NA),我想对它们进行估算。

以下是一些示例数据:

Date <- c("201101", "201102", "201101", "201102", "201103")
Age <- c("12-17", "12-17", "30-35", NA, NA)
Customer_ID <- c("1234", "1234", "5678", "5678", "5678")
df <- data.frame(Date, Age, Customer_ID)

Date      Age      Customer_ID
201101    12-17    1234
201102    12-17    1234
201101    30-35    5678
201102    NA       5678
201103    NA       5678

我想用 30-35 替换 Age 中的 NA。

因此,对于所有 NA,它必须检查是否有另一行具有相同的 Customer_ID,并将 NA 替换为另一行中所述的 Age 的值。

关于如何做到这一点的任何想法?谢谢。

【问题讨论】:

  • @SamFirke 你是对的,谢谢你的链接。

标签: r na


【解决方案1】:

您可以使用tidyr 中的fill 函数。这是一个tidyr 函数,用于最后的观察结转,即用以前的非NA 值填充NA 值。为了使它起作用,您可以使用arrange 对列2 进行排序,该列将NA 值排序在非NAs 后面,然后您可以按客户ID 分组并填写Age 列:

library(dplyr)
library(tidyr)
df %>% arrange(Age) %>% group_by(Customer_ID) %>% fill(Age)

# Source: local data frame [5 x 3]
# Groups: Customer_ID [2]

#      Date    Age Customer_ID
#    <fctr>  <fctr>  <fctr>
# 1  201101   12-17    1234
# 2  201102   12-17    1234
# 3  201101   30-35    5678
# 4  201102   30-35    5678
# 5  201103   30-35    5678

【讨论】:

    【解决方案2】:

    使用基础 R:

    lookup <- unique(df[!is.na(df$Age),][c('Customer_ID', 'Age')])
    df[is.na(df$Age),]$Age <- lookup[match(df[is.na(df$Age),]$Customer_ID,
                                                    lookup$Customer_ID),]$Age
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      • 2021-10-11
      • 1970-01-01
      相关资源
      最近更新 更多