выбор значения из одного столбца фильтрует другой столбец

#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)])