无法过滤采样的数据帧-R

时间:2018-07-08 13:53:50

标签: r dataframe filter dplyr

我的数据框是

的结果
new_df <- dat %>% group_by(ID) %>% sample_frac(0.25,replace = FALSE)

数据框如下所示:

Ad.ID    ID
1234     deroy
2345     deroy
4567     deroy
34567    mrroy
13467    mrroy
00024    ronde
32243    ronde

试图过滤出特定于证书持有者ID的行,例如用于deroy或mrroy,但无法进行过滤。

exp <- new_df[new_df$ID %in%"deroy",]

使用grepl可以对一个ID进行操作,但是如果我想对两个或三个ID进行操作,则不起作用。

请不要将其标记为重复项,因为我已经尝试了here和其他几个地方的所有建议。

我可能会错过一些基本知识。任何帮助表示赞赏。

  

添加剂量:

structure(list(Ad.ID = c(75856740L, 75899591L, 75904815L, 75911256L, 
75911261L, 75911267L, 75911277L, 75911277L, 75911291L, 75911302L, 
75905790L, 75905815L, 75905818L, 75910661L, 75914385L, 75902382L, 
75902383L, 75902384L, 75902386L, 75902391L), ID = c("deroy                         
", 
"deroy                         ", "deroy                         ", 
"deroy                         ", "deroy                         ", 
"deroy                         ", "deroy                         ", 
"deroy                         ", "deroy                         ", 
"deroy                         ", "deroy                         ", 
"deroy                         ", "deroy                         ", 
"deroy                         ", "jishuroy                      ", 
"jishuroy                      ", "jishuroy                      ", 
"jishuroy                      ", "jishuroy                      ", 
"jishuroy                      ")), .Names = c("Ad.ID", "ID"), row.names = 
c(1L, 
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 16L, 
17L, 18L, 19L, 20L, 21L), class = "data.frame")

3 个答案:

答案 0 :(得分:0)

尝试:

params = { a: 1, b: 2, c: 3}

答案 1 :(得分:0)

查看您的数据,您的ID列长30。每个字后面都有很多空白。在继续之前,请先清理干净。

nchar(new_df$ID[1])
30

使用dplyr:

new_df %>% 
  mutate(ID = gsub(" ", "", ID)) %>%
  filter(ID == "jishuroy")

     Ad.ID       ID
1 75914385 jishuroy
2 75902382 jishuroy
3 75902383 jishuroy
4 75902384 jishuroy
5 75902386 jishuroy
6 75902391 jishuroy

使用基数R:

new_df$ID <- gsub(" ", "", new_df$ID)
new_df[new_df$ID == "jishuroy", ]
      Ad.ID       ID
16 75914385 jishuroy
17 75902382 jishuroy
18 75902383 jishuroy
19 75902384 jishuroy
20 75902386 jishuroy
21 75902391 jishuroy

答案 2 :(得分:0)

一个简单的选择是使用trimws删除“ ID”列中的前导/滞后空格,然后使用filter

library(dplyr)
new_df %>%
       filter(trimws(ID) == "jishuroy")

对于多个ID,请按照OP的帖子中的说明使用%in%