我正在尝试根据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
答案 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