R:如何从纵向格式的多个字符串列表中删除 ID

R: How to delete ID from a list of multiple strings in a longitudinal format

我有 an earlier post regarding how to delete ID if any of the rows within ID contain certain strings (e.g., A or D) from the following data frame in a longitudinal format. These are R code examples that I received from the earlier post (r2evans, akrun, ThomasIsCoding) 顺序:

  1. d %>% group_by(id) %>% filter(!any(dx %in% c("A", "D")) )%>% 解组()
  2. filter(d, !id %in% id[dx %in% c("A", "D")])
  3. subset(d, !ave(dx %in% c("A", "D"), id, FUN = any))

虽然这些都很好,但我意识到我必须删除 600 多个字符串(例如 A、D、E2、F112、G203 等),所以我为这些字符串的列表创建了一个 csv 文件没有列名。 1. 列清单是正确的做法吗? 2、如果要使用strings列表的文件,应该如何修改上面的R代码?虽然我查看了 the other post or Google search results,但我不知道如何处理我的案例。如果有任何建议,我将不胜感激!

数据框:

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
  1. d %>% group_by(id) %>% filter(!any(dx%in%my_list$columnname)) %> % 取消分组()
  2. filter(d, !id %in% id[dx %in% my_list$columnname])
  3. subset(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