У меня есть следующие данные:
my_data <- tribble(
~item1, ~item2,
"car", "ferrari",
"house", "3 bed",
NA, "3"
)
Я пытаюсь извлечь имя столбца, в котором существует «дом».
Я пытался:
my_data %>%
mutate(across(everything(), ~str_detect(.x , "house")))
который возвращает:
# A tibble: 3 × 2
item1 item2
<lgl> <lgl>
1 FALSE FALSE
2 TRUE FALSE
3 NA FALSE
И здесь я застрял, пытаясь извлечь столбец «item1». Я пробовал использовать функцию any()
, но она сжимает все это до TRUE
.
Ищите решение dplyr/purrr, пожалуйста. Спасибо.
Редактировать:
Нет необходимости рассматривать мой вопрос столь широко и просто закрыть его. Первый «похожий» вопрос не использует dplyr и подмножества данных, а это не то, что я спрашивал. И я ценю, что второй «похожий» действительно применяет ту же функцию, но не возвращает имя столбца в качестве символа, как я просил... т. е. я бы не знал, что вы можете подать заявку names
сразу после этого. А еще идет дискуссия о том, нужен ли where
, которую не обсуждает ни один из остальных вопросов.
Пожалуйста, просто имя столбца, значения не нужны. Это связано с тем, что мы обнаружили особенность между различными версиями R, маркирующими столбцы как «X1» или «...1», поэтому мы находим способ идентифицировать имя столбца на основе того, как среда пользователя читает файл.
names(Filter(\(x) "house" %in% x, my_data))
в базе R
Попробуй это:
result <- my_data %>%
pivot_longer(everything(),
names_to = "column_name",
values_to = "value") %>%
filter(value == "house") %>%
pull(column_name)
#output
print(result)
[1] "item1"
Используя select(where())
:
library(dplyr)
my_data %>%
select(where(\(x) "house" %in% x)) %>%
names()
# "item1"
К вашему сведению, where
здесь не нужен, например. my_data %>% select(\(x) "house" %in% x) %>% names()
, только при использовании сокращенной записи формулы ~
@AndreWildberg Раньше можно было напрямую передать функцию предиката в select
. Но это было изменено. Я считаю, что это поддерживается для обратной совместимости, но совет — всегда передавать функцию предиката в where
. Поскольку функция \(x) "house" %in% x
является функцией-предикатом, ее следует заключить в where
. Использует ли он собственную лямбду или использует rlang лямбда/из функций формулы.
Вам нужно только имя столбца или значения столбца?