我有一个包含样品情节信息的数据帧,其中一些样地已经通过不同的条件细分。我的问题是如何根据需要删除的图和条件列表删除一些细分行?
我尝试使用此R-1, GA Block, Sector III, Salt Lake City, Kolkata, West Bengal 700106, India
以及dplyr软件包中的filter()函数使用更类似的变体。但是,这只会删除df2中列出的所有图解/条件。
这是我的数据的简化版本:
df3 <- df[!(df$PLOT %in% df2$PLOT & df$CONDID %in% df2$CONDID),]
和我试图用它来删除某些情节/条件看起来名单如下:
df <- data.frame(PLOT = c(82708, 88503, 88503, 88503, 86560, 89773, 82199, 82199, 84113),
CONDID = c(1, 1, 2, 3, 1, 1, 1, 2, 1))
df
我希望我的输出数据框看起来像这样:
df2 <- data.frame(PLOT = c(88503, 88503, 82199), CONDID = c(1, 3, 2))
df2
答案 0 :(得分:1)
您可以使用联接解决此问题:
library(dplyr)
df3<- anti_join(df,df2, by=c("PLOT","CONDID"))
答案 1 :(得分:0)
您建议的代码似乎可以与filter()
一起使用。
df %>%
filter(!(PLOT %in% df2$PLOT & CONDID %in% df2$CONDID))
# PLOT CONDID
# 1 82708 1
# 2 88503 1
# 3 86560 1
# 4 89773 1
# 5 82199 1
# 6 84113 1
如果不确定,可以逐步取消该过程:
df %>%
mutate(
condition1 = PLOT %in% df2$PLOT,
condition2 = CONDID %in% df2$CONDID,
cond_1_2 = condition1 * condition2
) %>%
filter(
cond_1_2 != 1
)
# PLOT CONDID condition1 condition2 cond_1_2
# 1 82708 1 FALSE FALSE 0
# 2 88503 1 TRUE FALSE 0
# 3 86560 1 FALSE FALSE 0
# 4 89773 1 FALSE FALSE 0
# 5 82199 1 TRUE FALSE 0
# 6 84113 1 FALSE FALSE 0