将字符串数组映射到整数数组

时间:2014-07-20 10:46:06

标签: r function

假设我在数据框中有一个列,颜色为c("Red", "Blue", "Blue", "Orange")。 我想把它作为c(1,2,2,3)

Red as 1
Blue as 2
Orange as 3

除了明显的if / else或switch函数之外,还有一种更简单的方法吗?

4 个答案:

答案 0 :(得分:8)

设置一个命名向量,描述颜色和整数之间的联系(即具体如何将字符串映射到整数):

colors=c(1,2,3)
names(colors)=c("Red", "Blue", "Orange")

现在使用命名向量生成与数据框中颜色关联的数字列表:

>colors[c("Red","Blue","Blue","Orange")]
   Red   Blue   Blue Orange 
     1      2      2      3 

更新以解决以下问题。这是我认为你想要做的一个例子。

dataframe=data.frame(Gender=c("F","F","M","F","F","M"))
strings=sort(unique(dataframe$Gender))
colors=1:length(strings)
names(colors)=strings
dataframe$Colours=colors[dataframe$Gender]

可以查看结果:

> dataframe
  Gender Colours
1      F      1
2      F      1
3      M      2
4      F      1
5      F      1
6      M      2

请注意,此示例假定您在Gender和Colors之间没有特定的映射。如果情况确实如此,那么仅仅关注@alexis_laz的评论可能更简单。

答案 1 :(得分:3)

我必须遗漏一些东西,但我相信这种方法会起作用。使用单词(下面,"名称")强制您的列到一个因子,您revalue用你的数字"颜色"。

require(plyr)

colors <- c("1","2","3")
names <- c("Red", "Blue", "Orange")
df <- data.frame(names, colors)
df$names <- as.factor(df$names)
df$names <- revalue(x = df$names, c("Red" = 1, "Blue" = 2, "Orange" = 3))

答案 2 :(得分:0)

使用 car :: recode()功能:

library(car)

recode(x, "'Red'=1; 'Blue'=2; 'Orange'=3;")
# [1] 1 2 2 3

答案 3 :(得分:0)

这是基于先前代码的功能:

# Recode 'string' into 'integer'
recode_str_int <- function(df, feature) {

  # 1. Unique values

  # 1.1. 'string' values
  list_str <- sort(unique(df[, feature]))

  # 1.2. 'integer' values
  list_int <- 1:length(list_str)

  # 2. Create new feature

  # 2.1. Names
  names(list_int) = list_str
  df$feature_new = list_int[df[, feature]]

  # 3. Result
  df$feature_new

} # recode_str_int

这样称呼:

 df$new_feature <- recode_str_int(df, "feature")