我想减少我的数据框,以便我可以确定清单是否有存在值(即 X)而不是数字。当前数据框中的每一行对应一个观察值和与该观察值相关的鸟类数量,每个清单都有多个观察值。
我创建了一个示例来说明我当前的数据框是什么样子 (
original_df
) 以及我希望我的数据框是什么样子 (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
你要找的是一个过滤加入
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