【发布时间】:2016-07-19 13:25:19
【问题描述】:
我有一个项目编号和库存位置的列表。项目可以出现在两种类型的库存位置 - warehouse 或 par 位置。我想在我的数据中添加一列,以指示特定项目编号是否与仓库位置相关联。样本数据如下:
item_num <- c("Item - 1", "Item - 2", "Item - 3", "Item - 1", "Item - 3",
"Item - 2")
locs <- c("warehouse", "par", "par", "par", "warehouse", "par")
fake_data <- tibble(item_num, locs)
fake_data
# A tibble: 6 x 2
item_num locs
<chr> <chr>
1 Item - 1 warehouse
2 Item - 2 par
3 Item - 3 par
4 Item - 1 par
5 Item - 3 warehouse
6 Item - 2 par
我想为所有Item - 1 和Item - 3 添加一个列TRUE,因为我的数据中都有一个仓库位置。对于Item - 2,这将是错误的。像这样的:
item_num locs wh_exists
1 Item - 1 warehouse TRUE
2 Item - 2 par FALSE
3 Item - 3 par TRUE
4 Item - 1 par TRUE
5 Item - 3 warehouse TRUE
6 Item - 2 par FALSE
我的混乱解决方案如下。
wh_locs <- fake_data %>%
filter(locs == "warehouse")
fake_data$wh_exist <- fake_data$item_num %in% wh_locs$item_num
fake_data
# A tibble: 6 x 3
item_num locs wh_exist
<chr> <chr> <lgl>
1 Item - 1 warehouse TRUE
2 Item - 2 par FALSE
3 Item - 3 par TRUE
4 Item - 1 par TRUE
5 Item - 3 warehouse TRUE
6 Item - 2 par FALSE
这可行,但在我看来,应该有一些聪明的方法来使用mutate 和group_by 来获得答案,这样我就可以将它们全部保存在一组管道函数中。
谢谢。
【问题讨论】: