如果一个级别在另一列中有或没有值,如何简化数据框以发出信号

问题描述 投票:0回答:1

我想减少我的数据框,以便我可以确定清单是否有存在值(即 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
r dataframe subset binary-data data-preprocessing
1个回答
3
投票

你要找的是一个过滤加入

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
© www.soinside.com 2019 - 2024. All rights reserved.