R中是否有一个函数可以在给定特定内容的情况下删除数千行?

R中是否有一个函数可以在给定特定内容的情况下删除数千行?,r,rows,R,Rows,我有一个大约20000行的数据帧(称为TLSWL)。我在df中有一个Time列,我需要删除在特定分钟内结束的所有行。我只需要30分钟的时间增量来匹配其他数据进行比较 这是我目前正在使用的: TLSWL<- TLSWL[TLSWL$Time != "0:06"&TLSWL$Time !="0:12"&TLSWL$Time !="0:18"&TLSWL$Time !="0:24"&TLSWL$Time != "0:36"&TLSWL$Time

我有一个大约20000行的数据帧(称为
TLSWL
)。我在df中有一个
Time
列,我需要删除在特定分钟内结束的所有行。我只需要30分钟的时间增量来匹配其他数据进行比较

这是我目前正在使用的:

TLSWL<- TLSWL[TLSWL$Time != "0:06"&TLSWL$Time !="0:12"&TLSWL$Time 
    !="0:18"&TLSWL$Time !="0:24"&TLSWL$Time != "0:36"&TLSWL$Time 
    !="0:42"&TLSWL$Time !="0:48"&TLSWL$Time != "0:54"&TLSWL$Time 
    != "1:06"&TLSWL$Time != "1:12"&TLSWL$Time != "1:18"&TLSWL$Time 
    != "1:24"&TLSWL$Time != "1:36"&TLSWL$Time != "1:42"&TLSWL$Time 
    != "1:48"&TLSWL$Time != "1:54"&TLSWL$Time != "2:06"&TLSWL$Time 
    != "2:12"&TLSWL$Time != "2:18"&TLSWL$Time != "2:24"&TLSWL$Time 
    != "2:36"&TLSWL$Time != "2:42"&TLSWL$Time != "2:48"&TLSWL$Time 
    != "2:54"&TLSWL$Time != "3:06"&TLSWL$Time != "3:12"&TLSWL$Time  
           and so on all the way to the times in 24:xx

TLSWL一个选项是创建需要匹配的值的
向量('v1'),使用
%in%
获取逻辑向量,求反(
)并对行进行子集划分

TLSWL[!TLSWL$Time %in% v1, , drop = FALSE]

您可以使用grepl函数选择时间包含字符串“:00”或“:30”的行

set.seed(4)

randTime我建议使用dplyr和tidyverse使这项任务更容易、更清晰

library(tidyverse)
TLSWL <- filter(TLSWL, str_detect(Time, ":00|:30"))
库(tidyverse)

TLSWL如果您包含一个简单的示例输入和所需的输出,可以用来测试和验证可能的解决方案,那么就更容易帮助您。将时间以“30”或“00”结尾可能会容易得多,这将是一个更短的表达式。这非常有用!工作得非常好,并且明显减少了代码行数。我只需要找出为时间编写向量的最佳方法,因为我试图避免使用任何as.posix函数,因为这会给我带来很多问题。@Katy你可以使用
sprintf
创建向量,就像在另一个答案中一样。我想sprintf是创建随机数据。编写向量的最佳方法是指定要:00或:30,而不是求反06、12等。请参见其他答案。
library(tidyverse)
TLSWL <- filter(TLSWL, str_detect(Time, ":00|:30"))
TLSWL <- TLSWL %>% filter(Time %>% str_detect(":00|:30"))