如何从清单R中删除多个值?
问题描述:
我有一个数据集清单这样的,或者也可以称为列表中移除如何从清单R中删除多个值?
ID Place
1 A
2 B
3 C
4 D
5 E
6 E
这里是数据框1
ID Place
1 A
1 B
1 C
1 D
1 H
1 J
2 A
2 B
2 F
2 J
2 D
3 A
3 E
3 C
3 T
4 D
4 E
5 A
5 E
5 U
6 A
6 B
6 C
6 E
6 F
我想用“ID的地方”组合从清单来在数据帧1中取出一些行,结果应该是这样的
ID Place
1 B
1 C
1 D
1 H
1 J
2 A
2 F
2 J
2 D
3 A
3 E
3 T
4 E
5 A
5 U
6 A
6 B
6 C
6 F
答
虽然你可以做到这一点,在几个步骤,merge
,可以绑定remove
设置为原始数据集,然后删除已添加的行和任何duplicated
案件:
df1[tail(!duplicated(rbind(remove,df1)), -nrow(remove)),]
# ID Place
#2 1 B
#3 1 C
#4 1 D
#5 1 H
#6 1 J
#7 2 A
#9 2 F
#10 2 J
#11 2 D
#12 3 A
#13 3 E
#15 3 T
#17 4 E
#18 5 A
#20 5 U
#21 6 A
#22 6 B
#23 6 C
#25 6 F
下面是两个步骤合并代码:
out <- merge(df1, transform(remove, drop=1), all=TRUE)
out[ is.na(out$drop), -match("drop", names(out)) ]
答
这里有一个选项:
dplyr::setdiff(df2, df1)
数据:
df1 <- read.table(header=T, stringsAsFactors = F, text="ID Place
1 A
2 B
3 C
4 D
5 E
6 E")
df2 <- read.table(header=T, stringsAsFactors = F, text="ID Place
1 A
1 B
1 C
1 D
1 H
1 J
2 A
2 B
2 F
2 J
2 D
3 A
3 E
3 C
3 T
4 D
4 E
5 A
5 E
5 U
6 A
6 B
6 C
6 E
6 F")
答
另一个base R
选项在每个数据集粘贴排在一起,得到一个合理的指标与%in%
和否定!
它子集原始数据集(“DF1”)的行
df1[!do.call(paste, df1) %in% do.call(paste, rmdat),]
# ID Place
#2 1 B
#3 1 C
#4 1 D
#5 1 H
#6 1 J
#7 2 A
#9 2 F
#10 2 J
#11 2 D
#12 3 A
#13 3 E
#15 3 T
#17 4 E
#18 5 A
#20 5 U
#21 6 A
#22 6 B
#23 6 C
#25 6 F
或者这可以用Reduce/Map/%in%/&
组合来完成。
df1[Reduce(`&`, Map(`%in%`, df1, rmdat)),]