R 从数据帧中删除行

R 从数据帧中删除行,r,dataframe,apply,R,Dataframe,Apply,我有这个数据框: set.seed(1) df <- data.frame(id1=LETTERS[sample(26,100,replace = T)],id2=LETTERS[sample(26,100,replace = T)],stringsAsFactors = F) 我想从df中删除df$id1或df$id2不在vec中的任何行 找到满足此条件的行索引是否有比以下更快的方法: rm.idx <- which(!apply(df,1,function(x) all(x %

我有这个
数据框

set.seed(1)
df <- data.frame(id1=LETTERS[sample(26,100,replace = T)],id2=LETTERS[sample(26,100,replace = T)],stringsAsFactors = F)
我想从
df
中删除
df$id1
df$id2
不在
vec
中的任何行

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

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

rm.idx在列上循环可能比在行上循环快。因此,使用
lappy
在列上循环,使用
%in%
创建逻辑
向量
列表,使用
Reduce
|
检查每个对应行是否有任何真值,并使用该值对“df”进行子集划分

df[Reduce(`|`, lapply(df, `%in%`, vec)),]
如果我们需要这两个元素,则将
|
替换为
&

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

在列上循环可能比在行上循环快。因此,使用
lappy
在列上循环,使用
%in%
创建逻辑
向量
列表,使用
Reduce
|
检查每个对应行是否有任何真值,并使用该值对“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)))
rm.idx实际上

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

rm.idx我在这样的脚本中使用了
dplyr

df1 <- df %>% filter(!(df$id1 %in%  vec)|!(df$id2 %in% vec))
df1%过滤器(!(df$id1%在%vec中)|!(df$id2%在%vec中))

我在这样的脚本中使用了
dplyr

df1 <- df %>% filter(!(df$id1 %in%  vec)|!(df$id2 %in% vec))
df1%过滤器(!(df$id1%在%vec中)|!(df$id2%在%vec中))

如果您只有这两个元素要检查,
哪个(!(df$id1%in%vec和df$id2%in%vec))
如果您只有这两个元素要检查,
哪个(!(df$id1%in%vec和df$id2%in%vec))
您不需要将其包装在
unique
其中
将为您提供满足条件的行号索引(设计上是唯一的),您不需要将其包装在
唯一的
<代码>它将为您提供符合条件的行号索引(设计上是唯一的)