如何简化 Dataframe ,以指示某个级别在另一列中是否有值

ws51t4hk  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(93)

此问题来自交叉验证的migrated,因为它可以在3天前的Stack Overflow.Migrated上回答。
我想减少我的 Dataframe ,以便我可以确定检查表是否有存在值(即X)而不是数字。当前 Dataframe 中的每一行对应于一个观察结果以及与该观察结果相关的鸟类数量,每个检查表都有多个观察结果。
我创建了一个示例来说明当前 Dataframe 的外观(original_df)以及我希望 Dataframe 的外观(goal_df)。

checklist_id <- c(1,1,2,2,2,3,3,3,3)
obs_id <- c("obs1", "obs2", "obs3", "obs4", "obs5", "obs6", "obs7", "obs8", "obs9")
how_many_birds <- c('7','8','X','2','3','1','6','8','X')

original_df <- data.frame(checklist_id, obs_id, how_many_birds)

# checklist_id obs_id how_many_birds
# 1            1   obs1              7
# 2            1   obs2              8
# 3            2   obs3              X
# 4            2   obs4              2
# 5            2   obs5              3
# 6            3   obs6              1
# 7            3   obs7              6
# 8            3   obs8              8
# 9            3   obs9              X

checklist_id_goal <- c(1,2,3)
at_least_one_x <- c(0,1,1)

goal_df <- data.frame(checklist_id_goal, at_least_one_x)

#  checklist_id_goal at_least_one_x
#1                 1              0
#2                 2              1
#3                 3              1
xkrw2x1b

xkrw2x1b1#

您要查找的是filtering join

checklist_df = data.frame(checklist_id = c(1, 2, 3))
semi_join(checklist_df, 
          filter(original_df, how_many_birds == 'X'), 
          by = 'checklist_id')

##   checklist_id
## 1            2
## 2            3

相关问题