【问题标题】:How to filter a specific column character in R after importing data with fread function使用 fread 函数导入数据后如何过滤 R 中的特定列字符
【发布时间】:2021-12-09 17:19:02
【问题描述】:

我已经从 data.table 包中导入了一个带有 fread 函数的 .tsv 文件

dt <- fread( "full_data.tsv", nrows = 1000000)

数据集有 37 列,如下所示:

ID DATA lan geo_coord
10002 2020-02-01 eng [10.2,32.5]
10003 2020-02-01 eng [12.2,42.5]
10004 2020-02-01 eng [14.4,22.6]
10005 eng [32.6,23.5]
10004 2020-02-01 eng [16.2,21.2]
10006 eng [16.7,20.2]
10007 2020-02-01 eng
10008 2020-02-01 eng
10009 2020-02-01 eng

我将仅过滤地理坐标列(字符)以删除获得如下结果的空单元格:

ID DATA lan geo_coord
10002 2020-02-01 eng [10.2,32.5]
10003 2020-02-01 eng [12.2,42.5]
10004 2020-02-01 eng [14.4,22.6]
10005 eng [32.6,23.5]
10004 2020-02-01 eng [16.2,21.2]
10006 eng [16.7,20.2]

我尝试使用来自 dplyr 的过滤器但没有结果。

【问题讨论】:

  • I tried with filter from dplyr without result你使用的代码是什么?
  • 您能否提供一个使用dput 和选定列的可重现示例,以便清楚您是否有NA 值或空字符串?

标签: r dplyr filter


【解决方案1】:

你试过了吗

library(tidyverse)
dt %>%
  filter(geo_coord != "" & !is.na(geo_coord))

似乎缺少的不是这样编码的,而是空字符串。

【讨论】:

  • 您好 Akrun,我在另一个数据集上尝试了您的代码并且它可以工作,但不幸的是它不适用于我需要的数据集,但我想我没有给您正确的详细信息。如果你好奇,你可以在这个网站上找到它:crisisnlp.qcri.org/tbcov,在第二个窗口“Country release:”我选择了“Italy (2gb)”。在同一页面上还有元数据,正确的列名是“geo_coordinates_lat_lon”,而不是我在帖子中写的“geo_coord”。实际上我在R中导入这个数据集时遇到了问题,因为它太大了,所以我想解决应用粗略的策略:
  • 一次导入几百万行,然后根据“geo_coordinates_lat_lon”值过滤数据,因为我只需要在此列中显示值的行
【解决方案2】:

我们可能会使用

library(dplyr)
dt %>%
    filter(complete.cases(na_if(geo_coord, "")))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-02
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多