如何根据R中的关联填充缺失值

时间:2017-02-26 21:51:37

标签: r

我正在尝试根据item_code列中的查找填写NA值。基本上,如果item_code有一个已分配的部分,我希望它查看该行中的item_code,并检查是否有一个部分分配给数据中的其他地方的代码,如果是,则使用该部分,否则为NA。这是一个巨大的数据集。

                   item_code            section
1                  50406737               556
2                  48147401               NA
3                  49762314               NA
4                  47860166               557
5                  48147401               557
6                  49762314               NA
7                  49762314               554
8                  50884988               554
9                  50856064               NA
10                 49762314               554
11                 50868629               556
12                 51041955               556
13                 50856064               NA
14                 48147401               NA
15                 50460172               557
16                 50856064               559
17                 47860166               557
18                 50459661               557

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题(请注意我在表格中添加了item_code,以添加item_code NA中只有section值的案例,您的示例数据中缺少这些内容)

require(tidyverse)
df= read.table(text =
"item_code            section
1                  50406737               556
2                  48147401               NA
3                  49762314               NA
4                  47860166               557
5                  48147401               557
6                  49762314               NA
7                  49762314               554
8                  50884988               554
9                  50856064               NA
10                 49762314               554
11                 50868629               556
12                 51041955               556
13                 50856064               NA
14                 48147401               NA
15                 50460172               557
16                 50856064               559
17                 47860166               557
18                 50459661               557
19                 50459662               NA",
  header = TRUE
)

df2 <- df %>% 
  group_by(item_code) %>%
  mutate(section = max(section, na.rm = T)) %>% 
  distinct(section) %>%
  print()

Source: local data frame [11 x 2]
Groups: item_code [11]

   section item_code
     <int>     <int>
1      556  50406737
2      557  48147401
3      554  49762314
4      557  47860166
5      554  50884988
6      559  50856064
7      556  50868629
8      556  51041955
9      557  50460172
10     557  50459661
11      NA  50459662