R 清理和编辑列

R 清理和编辑列,r,R,我一直在试图找出如何清理和编辑数据集中的列 我所使用的数据集应该只适用于旧金山市。数据集中的一个名为“城市”的列包含旧金山和其他城市的多种拼写。下面是它的外观: 表F$城市 Brentwood CA 30401 18 370 DALY CITY

我一直在试图找出如何清理和编辑数据集中的列

我所使用的数据集应该只适用于旧金山市。数据集中的一个名为“城市”的列包含旧金山和其他城市的多种拼写。下面是它的外观:

表F$城市

                                  Brentwood                      CA 
              30401                      18                     370 
          DALY CITY             FOSTER CITY                 HAYWARD 
                  0                       0                       0 
             Novato                 Oakland                 OAKLAND 
                  0                      40                       0 
                S F                    S.F.                 s.F. Ca 
                  0                   31428                      12 
          SAN BRUNO           SAN FRANCICSO          San Franciisco 
                  0                     221                      54 
      san francisco           san Francisco           San francisco 
                 20                     284                       0 
      San Francisco           SAN FRANCISCO        san Francisco CA 
              78050                   16603                       6 
     San Francisco,       San Francisco, Ca       San Francisco, CA 
                 12                       4                      72 
San Francisco, CA 94132          San Franciscvo           San Francsico 
                  0                       0                       2 
     San Franicisco          Sand Francisco                      sf 
                 41                      30                      17 
                 Sf                      SF                 SF , CA 
                214                   81226                       1 
       SF CA  94133                  SF, CA            SF, CA 94110 
                  0                       9                      38 
       SF, CA 94115                     SF.                     SF` 
                  4                    1656                      31 
  SO. SAN FRANCISCO                 SO.S.F. 
                  0                       6             
我想做的是把SF城变成只有旧金山。所以SF城市的所有数据将被放在旧金山的一个城市之下。因此,当我键入Tabelf $Currar时,它只显示旧金山。

我可以吗?比如:

sf$city = subset(sf, city == "S.F." & "s.F. Ca" & "SAN FRANCICSO" & ...

把我想要的所有城市变量子集?或者这会扭曲和弄乱我的数据吗?

我会尝试使用带有agrep和grep的正则表达式

示例数据:

d <- c("Brentwood", "CA", "DALY CITY", "FOSTER CITY", "HAYWARD", "Novato", 
"Oakland", "OAKLAND", "S F", "S.F.", "s.F. Ca", "SAN BRUNO", 
"SAN FRANCICSO", "San Franciisco", "san francisco", "san Francisco", 
"San francisco", "San Francisco", "SAN FRANCISCO", "san Francisco CA", 
"San Francisco,", "San Francisco, Ca", "San Francisco, CA", "San Francisco, CA 94132", 
"San Franciscvo", "San Francsico", "San Franicisco", "Sand Francisco", 
"sf", "Sf", "SF", "SF , CA", "SF CA", "94133", "SF, CA", "SF, CA 94110", 
"SF, CA 94115", "SF.", "SF`", "SO. SAN FRANCISCO", "SO.S.F.")
对于旧金山这样的词汇,ADIST是另一种选择。我发现以下设置工作正常。您可以选择旧金山:

d[adist("San Francisco", d, ignore.case = TRUE,
    cost = c(del = 0.5, ins = 0.5, sub = 3)) < 3] <- "San Francisco"

我会尝试使用agrep和grep的正则表达式

示例数据:

d <- c("Brentwood", "CA", "DALY CITY", "FOSTER CITY", "HAYWARD", "Novato", 
"Oakland", "OAKLAND", "S F", "S.F.", "s.F. Ca", "SAN BRUNO", 
"SAN FRANCICSO", "San Franciisco", "san francisco", "san Francisco", 
"San francisco", "San Francisco", "SAN FRANCISCO", "san Francisco CA", 
"San Francisco,", "San Francisco, Ca", "San Francisco, CA", "San Francisco, CA 94132", 
"San Franciscvo", "San Francsico", "San Franicisco", "Sand Francisco", 
"sf", "Sf", "SF", "SF , CA", "SF CA", "94133", "SF, CA", "SF, CA 94110", 
"SF, CA 94115", "SF.", "SF`", "SO. SAN FRANCISCO", "SO.S.F.")
对于旧金山这样的词汇,ADIST是另一种选择。我发现以下设置工作正常。您可以选择旧金山:

d[adist("San Francisco", d, ignore.case = TRUE,
    cost = c(del = 0.5, ins = 0.5, sub = 3)) < 3] <- "San Francisco"
为每个条目覆盖Sf$城市为旧金山,这里是典型的方法:

sf$city <- "San Francisco"
但是,如果你的一些观察结果不是旧金山,你想放弃这些,你会想先放弃这些。这是一个开始:

# drop non-SF observations
sfReal <- sf[!(tolower(sf$city) %in% c("daly city", "brentwood", "hayward", "oakland"))]
我的地理不是最好的,所以我可能错过了一些。或者,你可以使用%的百分比只包括那些观察是旧金山。鉴于您提供的上述场景,我怀疑情况是否如此

将来,如果这是一项重复的任务,您应该研究正则表达式和grep。这是一个神奇的工具,它将为字符串操作任务带来巨大的回报@JOTA提供了一个很好的解决方法。

< P>为每个条目覆盖Sf$城市为旧金山,这里是典型的方法:

sf$city <- "San Francisco"
但是,如果你的一些观察结果不是旧金山,你想放弃这些,你会想先放弃这些。这是一个开始:

# drop non-SF observations
sfReal <- sf[!(tolower(sf$city) %in% c("daly city", "brentwood", "hayward", "oakland"))]
我的地理不是最好的,所以我可能错过了一些。或者,你可以使用%的百分比只包括那些观察是旧金山。鉴于您提供的上述场景,我怀疑情况是否如此


将来,如果这是一项重复的任务,您应该研究正则表达式和grep。这是一个神奇的工具,它将为字符串操作任务带来巨大的回报@jota在提供的答案中为此提供了一个很好的方法。

若要对@jeta的答案进行riff,您还可以获取生成的数据集,并通过Google Maps API运行它,如下所示:

具体来说,使用该链接中可用的函数,您可以获取grep输出并运行

locations  <- ldply(d, function(x) geoCode(x))
head(locations, 10)
由于您似乎知道所有位置都在CA中,因此您可能还希望将CA附加到向量的末尾,如下所示:

d[grep("CA", d, invert = TRUE)] <- paste0(d[grep("CA", d, invert = TRUE)], ", CA")

locations  <- ldply(d, function(x) geoCode(x))

head(locations, 10)

注:谷歌对其API有速率限制。如果您希望避免注册和获取API密钥,您将希望按照上面Github链接上的注释中的建议,在10秒钟内将ldply分块

要仔细阅读@jeta的答案,您还可以获取生成的数据集,并通过Google Maps API运行它,如下所示:

具体来说,使用该链接中可用的函数,您可以获取grep输出并运行

locations  <- ldply(d, function(x) geoCode(x))
head(locations, 10)
由于您似乎知道所有位置都在CA中,因此您可能还希望将CA附加到向量的末尾,如下所示:

d[grep("CA", d, invert = TRUE)] <- paste0(d[grep("CA", d, invert = TRUE)], ", CA")

locations  <- ldply(d, function(x) geoCode(x))

head(locations, 10)

注:谷歌对其API有速率限制。如果您希望避免注册和获取API密钥,您将希望按照上面Github链接上的注释中的建议,在10秒钟内将ldply分块

你不知道你在问什么,但是如果你想把SF $Coupe改写成旧金山的每一个条目,这里的方法是:SF $A城HOK,足够简单。但我如何改变它,使它不包括奥克兰和非旧金山城市?见我的答案。我认为它会对你有用,不过,如果你想发展你的字符串操作技能,jota的答案是很好的。学习正则表达式是非常值得的,如果你做或将定期做数据清理。不清楚你在问什么,但是如果你想覆盖SF $CUTH成为旧金山的每一个条目,这里的方法是:SF $A城HOK,足够简单。但我如何改变它,使它不包括奥克兰和非旧金山城市?见我的答案。我认为它会对你有用,不过,如果你想发展你的字符串操作技能,jota的答案是很好的。如果您已经或将要定期进行数据清理,那么学习正则表达式是非常值得的。