【问题标题】:Rename factors from list (in R)重命名列表中的因子(在 R 中)
【发布时间】:2016-04-13 20:39:00
【问题描述】:

我的数据

数据来自对一组发展中国家的大型调查。除其他外,这些数据包括每个受访者所在国家和地区(国内)的变量。

唯一的问题是,不是将 local region 编码为字符串(例如“New York”或“Westchester County”,而是将其编码为数字,对应于密码本。

我的问题

我想知道是否有一种方法可以使用代码簿中的代码列表自动重命名因子的过程。每个区域前面都有一个数值和一个等号,后面紧跟一个逗号。

此列表采用以下形式:

1=New York, 2=Paris, 3=London, 4=Moscow, 5=Boston, ..., 230=Tblisi

是否有一些 R 代码可以让我使用此列表快速重命名此变量中的所有因子?

【问题讨论】:

  • 您的“列表”是否仅存在于文本文件中?或者它是一个 R 对象?
  • 嗨@jbaums,感谢您的反馈。我想确保提供足够的信息来为问题提供背景信息。为了回答您的问题,该列表存在于一个文本文件中。

标签: r rename


【解决方案1】:

您可以在代码列表上使用strsplit,然后将结果用作因子的级别和标签。

citylist <- c("1=New York", "2=Paris", "3=London", "4=Moscow", "5=Boston")
codes <- data.frame(do.call(rbind, strsplit(citylist, "="))) # Split and bind the result into a dataframe

set.seed(85)
mycities <- ceiling(runif(10, 0, 5))     # Generate some dummy data
mycities <- factor(mycities, levels = codes$X1, labels = codes$X2)

这给出了:

[1] London   New York Paris    Moscow   London   Boston   New York New York New York
[10] Boston  
Levels: New York Paris London Moscow Boston

【讨论】:

  • 嗨@Jay,非常感谢您的反馈。我现在就试试。
【解决方案2】:

如果你有一个带有类似矢量的文本文件

 1=New York, 2=Paris, 3=London, 4=Moscow, 5=Boston, ..., 230=Tblisi

您将不得不做一些正则表达式来从数字中提取城市。例如,您可以这样做:

 library(stringr)
 List <- c("1=New York", "2=Paris", "3=London", "4=Moscow", "5=Boston")
 Cities <- data.frame(Orig = List)
 Cities$CityNum <- str_extract(Cities$Orig, "[0-9]{1,}") # match the number at least once
 Cities$City <- str_sub(Cities$Orig, 
                   start = str_locate(Cities$Orig, "[A-Z]")[, 1],
                   end = str_length(Cities$Orig))

假设您在 MyData 中有一个名为“CityNum”的列列出了数字...

 MyData <- merge(MyData, Cities, by = CityNum)

我必须同意 jbaums 关于简洁的观点。 :-)

【讨论】:

  • 亲爱的@LauraS,感谢您的回复。该列表采用我在原始帖子中指定的形式。我希望在不重新输入每个值或手动添加引号的情况下抓取数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多