替换R中的符号字符串

时间:2015-01-18 10:19:29

标签: r

我有read.csv文件,包括一个列,我想用它替换两个值为0和1的字符串。

这是我的dput(head(data))

structure(list(Age = c(39L, 50L, 38L, 53L, 28L, 37L), 
    Salary = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c(" <=50K", 
    " >50K"), class = "factor")), .Names = c("Age", "Salary"), row.names = c(NA, 
6L), class = "data.frame")

薪资栏目前有&#34;&lt; = 50K&#34;和&#34;&gt; 50K&#34;,我希望前者被替换为0而后者被替换为1.这就是我目前所做的:

> transform(data, Salary=c("<=50K"=0, ">50K"=1)[as.character(Salary)])

但是,我认为存在一个问题,即字符串包含数学符号。我收到以下错误:

Error: unexpected '<=' in "transform(data, Salary=c(<="

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

在提供的链接中,最后一列只有两个“唯一”值。将值重新编码为“0,1”的一种方法是将列转换为“factor”并强制转换为“numeric”(as.numeric)。这将根据因子的级别给出“1,2”,减去“1”并得到正确的重新编码值,即“0,1”。

  unique(data$V15)
  #[1] " <=50K" " >50K" 
  data$V15 <- as.numeric(factor(data$V15))-1
  head(data$V15,20)
  #[1] 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 1

数据

  url <- 'https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data'

  library(RCurl)
  x <- getURL(url, ssl.verifypeer=FALSE)
  data <- read.csv(textConnection(x), stringsAsFactors=FALSE, header=FALSE)

答案 1 :(得分:1)

因为薪水是一个水平因素:

> levels(data$Salary)
[1] " <=50K" " >50K" 

试试这个:

levels(data$Salary) <- 0:1