Проверьте, что переменная классифицируется по-разному в наборе данных R - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь написать какую-то функцию в R, которая может решить конкретную проблему для меня.

Проблема: у меня большой набор данных из 20 000 наблюдений. Каждое наблюдение имеет 13 особенностей, одна из которых - город, а другая - округ. Я пытаюсь найти эффективный способ проверить, появляется ли какой-либо город в разных графствах.

Например, я заметил эту аномалию в данных:

City           |  County
San Francisco  |  San Francisco County
San Francisco  |  Alpine County

Я пытаюсь определить простой способ проверить другие экземпляры этого.

Я подумал об использовании

table(data$city, data$county)

Тем не менее, это кажется подверженным ошибкам, так как существует 10 округов и сотни городов, поэтому попытка ручной проверки кажется неудобной с точки зрения точности.

Я думаю о простом цикле for с чем-то внутри

for (x in 1:length(data$city)){
  if (data$city %in%
}

Я пытался проверить, появляется ли город в нескольких округах, чтобы увидеть, были ли какие-либо географические аномалии или грязные данные. Однако создание цикла for в этом контексте кажется более сложным, чем должно быть, поскольку R разработан не так, как язык C ++. Может ли кто-нибудь помочь мне найти способ проверить мою проблему?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Мы можем использовать tidyverse

library(dplyr)
df %>%
  group_by(City) %>% 
  filter(n_distinct(County) > 1) %>% 
  distinct(City)  %>%
  pull(City)
#[1] city1 city2
#Levels: city1 city2 city3 city5
0 голосов
/ 30 апреля 2018

Один из способов сделать это - использовать функцию tapply():

df <- data.frame(City=c( "city1","city2","city3","city1","city2","city5"), 
                 County = c("a", "b","a","b","a","b"))

df$City[which(tapply(df$County, df$City, length) > 1)]

Это создаст следующий вывод:

> df$City[which(tapply(df$County, df$City, length) > 1, useNames=FALSE)]
[1] city1 city2
Levels: city1 city2 city3 city5

Как видно из приведенного выше, в нем будет указано, какие города находятся в более чем 1 регионе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...