用相邻行 R 中的重复项替换 NA

Replacing NA with duplicates from adjacent row R

我有一个包含特征 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 的值。

关于如何做到这一点有什么想法吗?谢谢。

您可以使用 tidyr 中的 fill 函数。它是一个 tidyr 函数,用于 上次观察结转 ,即用先前的非 NA 值填充 NA 值。为了使其工作,您可以使用 arrange 对 column2 进行排序,该列将 NA 值排序在非 NA 后面,然后您可以按客户 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

基数 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