我之前有一篇文章,讲的是如果ID中的任何一行包含以下纵向格式数据帧中的某些字符串(例如A或D(,如何删除ID。以下是我从早期帖子(r2evans,akrun,ThomasIsCoding(中收到的R代码示例,顺序为:
- d%>%group_by(id(%>%filter(!any(dx%in%c("A","D"(((%>%取消组合((
- filter(d,!id%in%id[dx%in%c("A","d"(](
- 子集(d,!ave(dx%,%c("A","d"(,id,FUN=任意((
虽然这些都很好,但我意识到我必须删除600多个字符串(例如,A、D、E2、F112、G203等(,所以我为这些字符串的列表创建了一个没有列名的csv文件。1.列出清单是正确的方法吗?2.如果我打算使用字符串列表的文件,我应该如何修改上述R代码?尽管我查看了其他帖子或谷歌搜索结果,但我不知道该怎么处理我的案件。如果有任何建议,我将不胜感激!
数据帧:
id time dx
1 1 C
1 2 B
2 1 A
2 2 B
3 1 D
4 1 G203
4 2 E1
我想要的结果:
id time dx
1 1 C
1 2 B
更新:Tarjae的以下回答解决了这个问题。以下是解决方案的R代码。
my_list<-read.csv("my_list.csv"(
columnname
A
D
E2
F112
G203
- d%>%group_by(id(%>%filter(!any(%my_list$columnname中的dx%(%>%取消组合((
- 筛选器(d,!id%in%id[dx%in%my_list$columnname](
- 子集(d,!ave(dx%in%my_list$columnname,id,FUN=any((
这是一个很好的策略:
将您的值放在向量或列表中,此处为my_list
,然后用!
求反并使用%in%
运算符过滤dx
列
library(dplyr)
my_list <- c("A", "D")
df %>%
filter(!dx %in% my_list)
id time dx
1 1 1 C
2 1 2 B
3 2 3 B
4 4 1 G203
5 4 1 E1
扩展值列表:my_list <- c("A", "D", "G203", "E1")
提供相同的代码:
library(dplyr)
df %>%
filter(!dx %in% my_list)
id time dx
1 1 1 C
2 1 2 B
3 2 3 B