【发布时间】:2014-07-14 20:29:37
【问题描述】:
我有一个数据框,其中包含一些正数、一些负数、一些单词和一些连字符“单元格”,例如:
Revenue 73.88 74.76 78.02 78.19 68.74
Other Revenue - Total - - - - -
Total Revenue 73.88 74.76 78.02 78.19 68.74
Cost of Revenue - Total 21.09 21.61 23.01 22.76 19.99
Gross Profit 52.80 -53.15 -55.01 55.43 48.75
我想用 0 替换仅在倒数第二列中找到的连字符,但前提是连字符不在数字的开头。例如,我不想将负数变为正数。
我试过了:
df[-1] <- lapply(df[-1], function(x) as.numeric(gsub("-", 0, x)))
但返回前一个数据帧为:
Revenue NA NA NA NA NA
Other Revenue - Total 0 0 0 0 0
Total Revenue NA NA NA NA NA
Cost of Revenue - Total NA NA NA NA NA
Gross Profit NA NA NA NA NA
这是我绝对不想要的。我该如何解决这个问题?
谢谢。
这是我调用 str() 时的输出:
str(income)
'data.frame': 49 obs. of 6 variables:
$ Items : Factor w/ 49 levels "Accounting Change",..: 44 40 47 7 23 45 43 9 29 49 ...
$ Recent1: Factor w/ 14 levels "-","0.00","11,305.00",..: 4 1 4 11 14 6 5 1 1 1 ...
$ Recent2: Factor w/ 16 levels "-","-29.00","0.00",..: 5 1 5 15 16 9 6 1 1 2 ...
$ Recent3: Factor w/ 17 levels "-","0.00","11,449.00",..: 5 1 5 15 17 10 6 1 1 4 ...
$ Recent4: Factor w/ 18 levels "-","-31.00","0.00",..: 6 1 6 15 17 9 4 1 1 18 ...
$ Recent5: Factor w/ 14 levels "-","0.00","1,617.00",..: 4 1 4 10 13 5 3 1 1 1 ...
【问题讨论】:
-
这些列是数字的吗?我怀疑他们不是?
-
对不起,我忘了说它们是因素。
-
为什么它们是因素?对我来说,它们看起来不太像因素。它们只是因为您的
read.csv设置了stringsasfactors而根据因素自动创建吗? -
是的,它们被 read.xls 自动制成因子