Я пытаюсь отфильтровать или установить подмножество фрейма данных, чтобы он включал в себя только те строки, в которых содержимое столбца начинается с определенной буквы.
Я пытался использовать subset
и filter
и select
(включая starts_with
из dplyr
), но я не могу найти правильный синтаксис для достижения того, что мне нужно.Все примеры, которые я нашел, демонстрируют фильтрацию по значению, например x > 1
или подобному, а не через функцию.Мне удалось только создать ошеломляющее множество различных сообщений об ошибках.
ссылки: https://www.rdocumentation.org/packages/dplyr/versions/0.7.8/topics/select https://www.rdocumentation.org/packages/dplyr/versions/0.7.8/topics/filter_all https://www.rdocumentation.org/packages/tidyselect/versions/0.1.1/topics/select_helpers https://www.rdocumentation.org/packages/base/versions/3.5.1/topics/startsWith ФильтрСтроки data.frame по логическому условию
library(tidyverse)
a <- c("A1435","A6732","A8841","B7623","B7714","B3154")
b <- c("place 1", "place 2", "place 3", "place 4", "place 5", "place 6")
test_frame <- data.frame(a,b)
Вот некоторые из вещей, которые я пробовал:
subset <- subset(test_frame, subset = startsWith(test_frame$a, "A"))
## Error in startsWith(test_frame$a, "A") : non-character object(s)
subset <- subset(test_frame, subset = startsWith(test_frame[,1], "A") == 1)
## Error in startsWith(test_frame[, 1], "A") : non-character object(s)
subset <- test_frame %>% dplyr::select(test_frame, starts_with("A", ignore.case = TRUE, vars = a))
## Error: `test_frame` must evaluate to column positions or names, not a list
subset <- dplyr::select(test_frame, starts_with("A", ignore.case = TRUE, vars = a))
## Error in inds_combine(.vars, ind_list) : Position must be between 0 and n
subset <- test_frame %>% dplyr::filter_if(test_frame$a, ~ starts_with("A"))
## Error: Can't convert a `factor` object to function
subset <- vars_select(test_frame, starts_with("A"))
## Error: `vars` must be a character vector
subset <- dplyr::filter(test_frame, dplyr::starts_with("A"), all_vars(. == a))
## Error: No tidyselect variables were registered
subset <- test_frame$a %>% grep("^A", .)
## [1] 1 2 3
Эта последняя попытка, по крайней мере, не дает мне ошибки - но и не помогает мне сделать подмножество фрейма данных.Можно ли объединить этот grep с одной из вышеперечисленных функций, чтобы получить мой результат?
Я предполагал, что это задание будет довольно простым, но я потратил на него целый день без успеха.Итак, что мне не хватает?
* РЕДАКТИРОВАТЬ: Удивительно - несколько действительно полезных отзывов в течение нескольких минут после публикации.Спасибо всем, спасибо Stack Overflow!*