使用 unique 获取满足条件的 UserId 向量,而无需创建中间数据帧

Using unique to obtain a vector of UserId's that satisfy a criterion without creating an intermediate dataframe

我有一个包含多个受试者时间序列数据的数据框,我想提取一个唯一的 UserId 向量,该向量满足受试者回答一组问题的天数标准

    > df_all_rows
                                 UserId Answer_Date Q1_Daily Q2_Daily Q3_Daily Q4_Daily Q5_Daily
1  1f3edec4-38c9-44f3-9931-942ccba98203 2017-01-26        7        8        8        8        5        
2  202e6c2f-0b78-4ae2-9b60-4116a7241199 2017-03-11        6        4        5        3        6        
3  23124514-338b-46cf-8fa8-f4fea09f3d87 2017-04-05        3        3        4        1        3        
4  23124514-338b-46cf-8fa8-f4fea09f3d87 2017-04-06        3        3        4        1        2        
5  23124514-338b-46cf-8fa8-f4fea09f3d87 2017-04-07        3        3        4        1        2        
6  23124514-338b-46cf-8fa8-f4fea09f3d87 2017-04-08        3        3        2        2        1        
7  23124514-338b-46cf-8fa8-f4fea09f3d87 2017-04-09        3        3        4        1        2        
8  23124514-338b-46cf-8fa8-f4fea09f3d87 2017-04-10        3        3        4        2        2        
9  2354d580-4065-404a-8a3e-154dc83900d3 2017-04-21        9        9        8        8        9        
10 4ab5911d-767f-47db-b937-f1b2f3735ff7 2017-07-27        5        3        2        0        1        
11 59eeda84-53cc-47fd-b2b0-23bfaa6cbde7 2017-04-04        3        2        1        5        2        
12 59eeda84-53cc-47fd-b2b0-23bfaa6cbde7 2017-04-05        3        2        1        5        5        

我尝试了以下代码片段:

subjects <- df_all_rows %>% 
              group_by(UserId) %>%
              filter(n() >= n_required) %>% 
              unique(UserId)

不幸的是,最后一步不起作用:我收到以下错误消息:

Error in isFALSE(incomparables) : object 'UserId' not found

使用该段的前三行然后写入

创建一个新的数据框(称之为 df_tmp)非常容易
subjects <- unique(df_tmp[["UserId"]])

但肯定有一种方法可以在不创建另一个数据帧的情况下一步完成而不是两步完成吗?

非常感谢您为我的问题提供指导。

此致

托马斯·飞利浦

Error in isFALSE(incomparables) : object 'UserId' not found

此错误意味着 unique 实际上正在寻找名称为 UserId 的变量。当然,这是不存在的。

独一无二

如果您想使用 unique,以下内容应根据

subjects <- df_all_rows %>% 
              group_by(UserId) %>%
              filter(n() >= n_required) %>% 
              {unique(.$UserId)}

干净整洁

正如用户 MrFlick 在下面的评论中所指出的,如果您想要一个纯粹的整洁版本,您也可以使用以下内容。

subjects <- df_all_rows %>% 
              group_by(UserId) %>%
              filter(n() >= n_required) %>% 
              pull(UserId) %>% unique()

或者您可以尝试使用 distinct. See also here

HTH!