我正在尝试将每列中某个国家/地区的每个缩写的值替换为其实际名称(即" USA" to" United States")。数据帧超过10,000行。我尝试了很多方法,包括下面的代码,但仍然无法更新值。我还尝试使用%in%的相同语句。
starbucks_data = read.csv("starbucksdata.csv", header = TRUE)
starbucks_data1 = starbucks_data[!(is.na(starbucks_data)),]
new_starbucks_data = starbucks_data1[,c("Brand","City", "Country")]
new = data.frame(new_starbucks_data, stringsAsFactors = FALSE)
new$Country[new$Country == "AD"] <- "Andorra"
new
这是使用上述方法的样子。我得到错误&#34;无效因子级别,NA生成&#34;但我认为stringsAsFactors = FALSE将解决该问题。任何帮助,将不胜感激。
答案 0 :(得分:2)
问题在您使用read.csv
时开始 - 该功能会自动将所有字符串转换为因子。创建新数据框时,不将任何字符串转换为因子并不重要 - 因为它们已经是因素。
您有几种选择:
read_csv
套餐包中的某个地方使用tidyverse
- 它没有明确做到这一点。stringsAsFactors = FALSE
功能添加选项read.csv
。对于最后一个选项,(再次)存在多个选项。基本R方法是:
levels(new$country) <- c("new1", "new2", ...)
(将...
替换为您想要的名字列表)。
这可能有点危险,因为你必须完美排列它们以获得正确的结果。使用forcats
包的替代方法(tidyverse
的一部分使用函数fct_recode
来明确重新编码每个因素:
new$country <- fct_recode(
Andorra = "AD",
`United States` = "USA")
等。 (当涉及空格时,您可能需要使用引号。我没有测试这个方面。)