我正在尝试在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 ++之类的语言不同。有人可以帮助我创建一些方法来测试我的问题吗?
答案 0 :(得分:0)
一种方法是使用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 :(得分:0)
我们可以使用tidyverse
library(dplyr)
df %>%
group_by(City) %>%
filter(n_distinct(County) > 1) %>%
distinct(City) %>%
pull(City)
#[1] city1 city2
#Levels: city1 city2 city3 city5