繁体   English   中英

从数据框中删除行

[英]Removing rows from a data frame

我有这个data.frame

set.seed(1)
df <- data.frame(id1=LETTERS[sample(26,100,replace = T)],id2=LETTERS[sample(26,100,replace = T)],stringsAsFactors = F)

和这个vector

vec <- LETTERS[sample(26,10,replace = F)]

我想从df删除df$id1df$id2不在vec任何行

是否有比此条件更快的找到满足此条件的行索引的方法:

rm.idx <- which(!apply(df,1,function(x) all(x %in% vec)))

我用dplyr这样的脚本

df1 <- df %>% filter(!(df$id1 %in%  vec)|!(df$id2 %in% vec))

在列上循环可能比在行上循环更快。 因此,使用lapply遍历各列,使用%in%创建一个逻辑vector s list ,使用Reduce with | 检查每个对应的行是否有TRUE值,并使用它来对'df'进行子集化

df[Reduce(`|`, lapply(df, `%in%`, vec)),]

如果我们需要两个元素,则替换| &

df[Reduce(`&`, lapply(df, `%in%`, vec)),]

其实

rm.idx <- unique(which(!(df$id1 %in% vec) | !(df$id2 %in% vec)))

也很快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM