拆分变量以允许数字列

时间:2015-07-03 06:22:10

标签: r

在一个数据框(称之为data)中,我有一个变量(称之为var),它接受诸如" John Smith"," Adam之类的值Olson"," Peter Bradley"等

sapply(data, mode)表示var是数字。当我做as.numeric(var)时,R给出数字(1,2,3,......如预期的那样)。

当我使用stringr::str_split_fixed将变量拆分为两个时(如http://rbyexamples.blogspot.com/2015/07/r-for-stata-users-part-3.html任务#14中所述),我调用变量firstnamelastname,R告诉我我认为变量是字符。因此,我无法使用as.numeric

如果我正确阅读How to convert a data frame column to numeric type?,则transform无法正常工作。因此,考虑到我分割var的方式,没有办法将变量转换为数字。

有没有办法拆分变量,以便更容易将其转换为数字?

1 个答案:

答案 0 :(得分:1)

我将“var”拆分为“firstname”和“lastname”,如下所示:

df <- data.frame( var = c("Adam Olson", "John Smith", "Peter Olson"))
dfFirst <- df
dfLast  <- df
colnames(dfFirst) <- "firstname"
colnames(dfLast)  <- "lastname"

L <- levels(df$"var")

for (n in (1:length(L)))
{
  i <- which(strsplit(L[[n]],"")[[1]]==" ")
  levels(dfFirst$"firstname")[n] <- substr(L[[n]],1,i[1]-1)
  levels(dfLast$"lastname")[n]   <- substr(L[[n]],i[length(i)]+1,nchar(L[[n]]))
}

dfFirstLast <- cbind(dfFirst,dfLast)

这非常不实,但变量仍为数字:

> as.numeric(dfFirstLast$"firstname")
[1] 1 2 3
> as.numeric(dfFirstLast$"lastname")
[1] 1 2 1
> as.character(dfFirstLast$"firstname")
[1] "Adam"  "John"  "Peter
> as.character(dfFirstLast$"lastname")
[1] "Olson" "Smith" "Olson"
> as.numeric(dfFirstLast$"firstname") + 8
[1]  9 10 11
> as.numeric(dfFirstLast$"lastname") / 7
[1] 0.1428571 0.2857143 0.1428571