如何在r中将类型更改为数字?

时间:2014-08-10 10:35:27

标签: r

我有以下数据

> head(duomframe)
            DNSB.Ražuva X1 X1.1 X0 X0.1 X40 X8.013.54 X1.2 X0.2 X0.3 X0.4 X0.5
1 UAB Antakalnio būstas  1    1  0    0  51    511,55    0    1    0    0    0
2 UAB Antakalnio būstas  1    0  1    0  54    519,46    0    1    0    0    0
3 UAB Antakalnio būstas  1    0  1    0  42     492,7    0    1    0    0    0
4 UAB Antakalnio būstas  1    0  1    0  51    515,68    0    0    0    0    0
5 UAB Antakalnio būstas  1    0  1    0  49  2.308,78    0    1    0    0    0
6 UAB Antakalnio būstas  1    0  1    0  63    381,75    0    1    0    0    0
  X0.6 X7.197.16 X78.23 X4 X1.3 X0.7 X0.8 X7.783.31 X2 X1.4 X42.22 X14 X33.33
1    0         0  86.80  2    4    0    0    173,36  1    1  58.31   5 189,79
2    0         0  53.67  1    2    0    3    204,85  0    1  66.29   2    140
3    0         0  52.13  2    3    0    0    160,73  0    2  93.69   2 119,03
4    1    415,68  45.19  3    1    2    0    641,54  0    1  53.56   6 102,11
5    0         0 103.44  3    1    3    0    113,08  0    2 122.45   5 527,61
6    0         0  49.75  4    3    0    0    384,62  0    3  75.09   3  69,46
  X0.9 X12
1    0   4
2    1   3
3    2   4
4    0   6
5    0   5
6    1   4

我需要将除第一个之外的所有列从字符类型更改为数字。我找到了关于转换一列的信息,但在这里我还有更多。我尽管如此,我试图使用一栏的书面提示,但它没有用。

例如,transform(duomframe, place = as.numeric(place)) (这里的地方是标有0和1值的第二列)。 通过这种方式,我只得到了一些意思。

我还通过创建假数据来尝试这个:

place2<-duomframe[place]
d <- data.frame(place2 = place[1:421], 
                fake_place = as.character(1:421), 
                fac = factor(1:421), 
                place_fac = factor(letters[1:421]), 
                num = 1:421, stringsAsFactors = FALSE)
transform(d, fake_place = as.numeric(fake_place), place_fac = as.numeric(place_fac))

但它也不起作用

mydata<-duomframe
mydata <- within(mydata, { 
        place <- as.numeric(as.character(place)) 
        man <- as.numeric(as.character(man)) 
        ....
}) 

这个也是

我的数据中有421行和27列。

1 个答案:

答案 0 :(得分:0)

 duomframe[,-1] <- lapply(duomframe[,-1], function(x) {as.numeric(gsub(",", "", x))})
 duomframe[1:5, 1:7]
 #            DNSB.Ražuva X1 X1.1 X0 X0.1 X40   X8.013.54
 #1 UAB Antakalnio būstas  1    1  0    0  51 51155.00000
 #2 UAB Antakalnio būstas  1    0  1    0  54 51946.00000
 #3 UAB Antakalnio būstas  1    0  1    0  42  4927.00000
 #4 UAB Antakalnio būstas  1    0  1    0  51 51568.00000
 #5 UAB Antakalnio būstas  1    0  1    0  49     2.30878