【问题标题】:How to Remove certain rows after extraction in R?在R中提取后如何删除某些行?
【发布时间】:2021-06-30 13:25:22
【问题描述】:

我试图在 R 中提取后删除某些行。 原始数据集定义为 raw_data。 某些行被定义为 inner_data。

定义inner_data后,我想删除raw_data中的inner_data。

inner_data <- raw_data[(grepl("^30", raw_data$start) | grepl("^36", raw_data$start))
                       & (grepl("^30", raw_data$end) | grepl("^36", raw_data$end)), ]

我该如何解决这个问题?

【问题讨论】:

  • 这在目前的状态下很难告知/帮助,请提供一小部分数据样本。对我来说有趣的是你说你想删除列但是你正在搜索行并删除行......
  • 嗨。您可以通过将数据集重新定义为原始数据集的一部分来实现此目的。试试raw_data &lt;- raw_data[,1:5] 而不是 1:5 你写你想保留的列。
  • 哦,天哪,我编辑了这个问题。我的意思是,我想删除某些行。有没有办法比较两个数据框以消除重复行?

标签: r dplyr grepl


【解决方案1】:

这里有两种方法可供考虑:

1) 使用过滤器变量

与其直接从raw_data 一步构建inner_data,不如先创建一个新列来指示该行属于哪个输出数据集。使用此列过滤掉两个数据集。

类似于以下内容:

raw_data = raw_data %>%
  mutate(splitting_col = (grepl("^30", start) | grepl("^36", start))
                       & (grepl("^30", end) | grepl("^36", end)))
inner_data = raw_data %>%
  filter(splitting_col == TRUE)
raw_data = raw_data %>%
  filter(splitting_col == FALSE)

2) 使用 anti_join

反连接是在与第二个表比较后从一个表中删除记录的操作。搜索“dplyr anti_join”应该会给你一些关于这方面的教程。

它的工作方式类似于连接,但排除记录而不是合并它们。类似于以下内容:

inner_data <- raw_data[(grepl("^30", raw_data$start) | grepl("^36", raw_data$start))
                       & (grepl("^30", raw_data$end) | grepl("^36", raw_data$end)), ]

raw_data = raw_ata %>%
  anti_join(inner_data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 2012-10-12
    • 2020-08-11
    相关资源
    最近更新 更多