Используя следующий фрейм данных (похожий на мои данные, но намного меньше):
id <- c(1:10)
clo_a <- c(rep(c("Yes","No"), 5))
clo_f <- c(rep(c(4,5), 5))
man_a <- c(rep(c("Yes","No"), each = 5))
man_f <- c(rep(c(c(3,7)), each = 5))
pho_a <- c(rep(c(NA, NA, "Yes", NA, "No"), 2))
pho_f <- c(rep(c(1,2,3,4,5), 2))
ds <- data.frame(id, clo_a, clo_f, man_a, man_f, pho_a, pho_f)
создает ds фрейма данных следующим образом:
id clo_a clo_f man_a man_f pho_a pho_f
1 1 Yes 4 Yes 3 <NA> 1
2 2 No 5 Yes 3 <NA> 2
3 3 Yes 4 Yes 3 Yes 3
4 4 No 5 Yes 3 <NA> 4
5 5 Yes 4 Yes 3 No 5
6 6 No 5 No 7 <NA> 1
7 7 Yes 4 No 7 <NA> 2
8 8 No 5 No 7 Yes 3
9 9 Yes 4 No 7 <NA> 4
10 10 No 5 No 7 No 5
Теперь я хочу выбрать идентификатор переменных, оканчивающихся на _a с «Да», но также и значения переменных, заканчивающихся на _f, хотя в идеале отдельно.
В качестве одного примера я могу написать:
upset_clo_a <- ds$id[which( ds$clo_a == "Yes")]
производя:
> upset_clo_a
[1] 1 3 5 7 9
Теперь я бы хотел повторить это для всех переменных, в идеале используя вектор с общим знаменателем в наборе переменных, например:
ai_list <- c("clo", "man", "pro")
Очевидно следующее пример не работает. Я пробовал несколько вариантов использования paste()
или substitute()
, но ничего полезного не дало.
lapply(ai_list, function(x) {
upset_x <- ds$id[which( ds$x == "Yes")]
})
Результат одинаков для всех вариантов, которые я пробовал:
[[1]]
integer(0)
[[2]]
integer(0)
[[3]]
integer(0)
В end Я хочу (например) прочитать ID-векторы для каждой переменной (например, upset_clo_f) как список векторов в графике upSet. Может у вас есть отличная идея. Спасибо!