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) 顺序:
- d %>% group_by(id) %>% filter(!any(dx %in% c("A", "D")) )%>%
解组()
- filter(d, !id %in% id[dx %in% c("A", "D")])
- 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
- d %>% group_by(id) %>% filter(!any(dx%in%my_list$columnname)) %> % 取消分组()
- filter(d, !id %in% id[dx %in% my_list$columnname])
- 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
我有 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) 顺序:
- d %>% group_by(id) %>% filter(!any(dx %in% c("A", "D")) )%>% 解组()
- filter(d, !id %in% id[dx %in% c("A", "D")])
- 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
- d %>% group_by(id) %>% filter(!any(dx%in%my_list$columnname)) %> % 取消分组()
- filter(d, !id %in% id[dx %in% my_list$columnname])
- 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