【问题标题】:Unable to filter sampled dataframe - R无法过滤采样数据帧 - R
【发布时间】:2018-07-08 13:53:49
【问题描述】:

我的数据框是

的结果
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 执行此操作,但如果我想为两个或三个执行此操作,它就行不通了。

请不要标记为重复,因为我已经尝试了来自 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")

【问题讨论】:

  • 不能做是什么意思?你有错误吗?因为如果我测试您的new_df[new_df$ID %in%"deroy",] 代码,它会返回带有“deroy”的行
  • @phiver 在运行我的控制台给出的代码后 #A tibble: 0 x 2 # Groups: ID [0] # ... 有 2 个变量:Ad.ID , ID
  • 由于您使用的是 dplyr,如果您使用 new_df %&gt;% filter(ID == "deroy") 会发生什么。
  • @phiver 还是一样的结果
  • 示例数据上的所有选项都可以正常工作。我认为您必须检查数据中的拼写错误/尾随空格等。或者,如果您将dput(head(dat, 20)) 的结果添加到您的问题中。因为现在我看不出问题出在哪里。

标签: r dataframe filter dplyr


【解决方案1】:

查看您的数据,您的 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

【讨论】:

  • 谢谢@phiver mutate 没有用,但是base R 可以。再次感谢您!
【解决方案2】:

试试:

df1 = new_df %>% filter(id == 'deroy')
df2 = new_df %>% filter(id == 'mrroy')
df3 = new_df %>% filter(id %in% c('mrroy', 'deroy'))

【讨论】:

  • 谢谢!结果还是一样。输出为 0
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-28
    • 2018-02-01
    • 2020-09-16
    • 1970-01-01
    • 2019-09-22
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多