我有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(<="
有什么建议吗?
答案 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