【问题标题】:How to find and Replace String column values of a Data frame in R如何在R中查找和替换数据框的字符串列值
【发布时间】:2019-03-19 04:06:55
【问题描述】:

在 R 中,我在数据框中有一列,其中包含城市名称。如下图所示。

enter image description here

这包含一些错误的数据,例如需要将数据 N、Z、X 替换为“其他”,并且某些城市代码需要替换为其原始名称,例如

OC, Okl City --> Oklahoma City
LA --> Los Angles
NW --> New York

当我尝试通过在 FOR 循环中使用 IF 和 ELSE IF 语句来执行此操作时。我非常失败。

如果有人能在这方面帮助我,那将是非常有帮助的。

提前致谢。

【问题讨论】:

  • 请使用例如dput()或head()提供纯文本数据,而不是我们无法复制/粘贴的图像。
  • @neilfws 感谢兄弟的提示 :) 将来我会确保遵循它。

标签: r string dataframe


【解决方案1】:

这是一个使用dplyr::case_when() 的可重现示例,您可以将其推广到任意数量的条件:

library(tidyverse)
d <- tibble(city = c("Oklahoma City","Los Angeles","OC","NY","Z","Z","X","N"))
d <- mutate(d, city = case_when(city %in% c("Z","X","N") ~ "Other", 
                                city == "Oklahoma City"  ~ "OKL",
                                city == "Los Angeles"    ~ "LA",
                                TRUE ~ city))
d


# A tibble: 8 x 1
  city 
  <chr>
1 OKL  
2 LA   
3 OC   
4 NY   
5 Other
6 Other
7 Other
8 Other

【讨论】:

  • 您好 Pauloo,感谢您的回复。这为如何处理问题提供了新的视角。但我希望城市代码也打印为城市名称。例如,如果它的“NW”则需要将其打印为纽约,如果它的 OKL 或 Okl City。我希望它被打印为俄克拉荷马城。
  • 那么您正在寻找一个通用的解决方案。请参阅我编辑的答案。
  • 谢谢保罗。我认为这将解决问题:) 我还有一个查询。例如,输入“Z”、“X”、“N”是随机和假输入。所以我认为对它们进行硬编码将是一个问题,因为将来可能会有不同的假输入。如果输入是标准城市名称和代码,则输出应与结果相同,或者如果该输入是假的(不可预测),则应将其分类为“其他”。
  • 我不太确定@DavidChris 的意思,但要使此代码正常工作,您需要知道要将什么归为一组。
  • 数据是人们为特定调查输入的输入数据。在某些情况下,人们可能会输入错误/不正确的数据。例如,NY 可以被识别/理解为 New York。但是对于 Z、X、C,我们不知道他们想输入什么。所以需要归类为“其他”。将来当人们输入数据时,可能会有更多不同类型的不正确数据。所以用这种方式硬编码“city %in% c("Z","X","N")"可能会导致每当有新的不正确数据时我们需要更改代码的情况。还有其他的吗解决这个问题的方法。
【解决方案2】:

利用 plyr 包中的重估。

library(plyr)

df$city<-revalue(df$city,c("OC"="Oklahoma City",
                             "Okl City"="Oklahoma City",
                             "LA"="Los Angles",
                             "NW"="New York",
                             "Z"="Others",
                             "X"="Others",
                             "N"="Others"))

【讨论】:

  • 嗨 Sathish,感谢您的回复。我今天从你的回答中学会了如何使用函数 revalue :) 但是关于我的预期输出,我非常不确定关于“其他”的条目(输入)是什么。 Z、X、N 值只是说明它们不是正确输入的示例。将来我可能会得到更多我需要归类为“其他”的随机变量。
【解决方案3】:

使用可以case when 类似于@Rich 上面的答案,但区分不是条件。

library(tidyverse) d <- tibble(city = c("Oklahoma City","Los Angeles","OC","NY","Z","Z","X","N")) d <- mutate(d, city = case_when(!city %in% c("Oklahoma City", "Los Angeles" ) ~ "Other", city == "Oklahoma City" ~ "OKL", city == "Los Angeles" ~ "LA", TRUE ~ city))

【讨论】:

    猜你喜欢
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 2011-03-09
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多