1

我有以下data.frame:

employee <- c('John Doe','Peter Gynn','Jolie Hope')
# Note that the salary below is in stringified format.
# In reality there are more  such stringified numerical columns.
salary <- as.character(c(21000, 23400, 26800))
df <- data.frame(employee,salary)

输出是:

> str(df)
'data.frame':   3 obs. of  2 variables:
 $ employee: Factor w/ 3 levels "John Doe","Jolie Hope",..: 1 3 2
 $ salary  : Factor w/ 3 levels "21000","23400",..: 1 2 3

我想要做的是将值从字符串直接转换为df变量的纯数字。同时保留字符串名称employee。我试过这个但不会工作:

as.numeric(df)

归根结底,我想对来自df. 比如df2 <- log2(df)等。

4

1 回答 1

4

好的,这里发生了几件事:

  • R 有两种不同的数据类型,看起来像字符串:factorcharacter
  • 您不能就地修改大多数 R 对象,您必须通过赋值来更改它们

您的示例的实际修复是:

df$salary = as.numeric(as.character(df$salary))

如果您尝试as.numericdf$salary不将其转换为characterfirst 的情况下调用,您会得到一个有点奇怪的结果:

> as.numeric(df$salary)
[1] 1 2 3

当 R 创建一个因子时,它将向量的唯一元素转换为级别,然后使用整数表示这些级别,这就是您尝试转换为数字时看到的内容。

于 2013-09-10T03:25:42.370 回答