#r #dplyr
#r #dplyr
Вопрос:
Я нахожусь в процессе работы с проектом больших данных, где я хочу отфильтровать выделение одного столбца другим.
Например, я хочу продемонстрировать дом 1, и в результате этого я хочу сравнить дом 1 с другими значениями из других городских домов, не со всеми домами.
table <- data.frame(
house=paste("House", 1:15),
category = c("Urban", "Rural", "Suburban")
)
table
# house category
# 1 House 1 Urban
# 2 House 2 Rural
# 3 House 3 Suburban
# 4 House 4 Urban
# 5 House 5 Rural
# 6 House 6 Suburban
# 7 House 7 Urban
# 8 House 8 Rural
# 9 House 9 Suburban
# 10 House 10 Urban
# 11 House 11 Rural
# 12 House 12 Suburban
# 13 House 13 Urban
# 14 House 14 Rural
# 15 House 15 Suburban
Я пытался попробовать это, но у меня это не работает…
table %>%
filter(house == house1) %>%
filter(category == table$house)
Я хочу, чтобы результат выглядел следующим образом…
# house category
# 1 House 1 Urban
# 2 House 4 Urban
# 3 House 7 Urban
# 4 House 10 Urban
# 5 House 13 Urban
Любые предложения действительно приветствуются.
Ответ №1:
Возможно, вы можете попробовать базовый R-код ниже
subset(df,category == category[house=="House1"])
или dplyr
вариант
df %>%
filter(category == category[house == "House1"])
что дает
house category
1 House1 Urban
3 House3 Urban
5 House5 Urban
12 House12 Urban
13 House13 Urban
14 House14 Urban
фиктивные данные
df <- structure(list(house = c("House1", "House2", "House3", "House4",
"House5", "House6", "House7", "House8", "House9", "House10",
"House11", "House12", "House13", "House14", "House15"), category = c("Urban",
"Suburban", "Urban", "Rural", "Urban", "Suburban", "Suburban",
"Rural", "Rural", "Suburban", "Suburban", "Urban", "Urban", "Urban",
"Rural")), class = "data.frame", row.names = c(NA, -15L))
Комментарии:
1. Это ответ, который я ищу! Большое вам спасибо.
Ответ №2:
Используя dplyr, вы могли бы сделать что-то вроде этого
table %>%
filter(category == filter(table, house=="House 1") %>% pull(category))
По сути, просто вложенный запрос для поиска категории дома 1.
Ответ №3:
Попробуйте
table %>%
filter(category == "Urban")
Помните, что вам нужно использовать кавычки " "
в ваших filter
утверждениях.
Ответ №4:
Вы также можете использовать match
который вернет индекс первого совпадения, и вы можете получить соответствующее category
из него.
subset(table, category == category[match('House 1', house)])
house category
1 House 1 Urban
4 House 4 Urban
7 House 7 Urban
10 House 10 Urban
13 House 13 Urban
Тот же код с filter
, если вы хотите использовать dplyr
:
dplyr::filter(table, category == category[match('House 1', house)])