2016-06-28 4 views
-3

У меня есть данные кадра (DataFrame1) с этим классом (я только напечатать 4th первые классы):Изменения классов dataframe, как и другие dataframe

> str(DataFrame1) 
'data.frame': 11170 obs. of 30 variables: 
$ Var1   : int 20112 20112 20112 20121 20142 20142 20142 20122 20142 20142 ... 
$ Var2   : Factor w/ 4003 levels "1042209","1042210",..: 1 2 5 6 7 8 9 10 11 12 ... 
$ Var3   : Factor w/ 6 levels "2010/11","2011/12",..: 2 2 2 3 5 5 5 3 5 5 ... 
$ Var4   : Factor w/ 2 levels "1","2": 2 2 2 1 2 2 2 2 2 2 ... 

И я создаю новый фрейм данных с точно такими же столбцов (в том же порядке с тем же значением).

> str(DataFrame2) 
'data.frame': 7 obs. of 30 variables: 
$ Var1   : Factor w/ 5 levels "20102","20132",..: 1 3 5 5 5 4 2 
    ..- attr(*, "names")= chr "b1" "b2" "b3" "b4" ... 
$ Var2   : Factor w/ 6 levels "270620","28078",..: 2 3 3 4 5 6 1 
    ..- attr(*, "names")= chr "b1" "b2" "b3" "b4" ... 
$ Var3   : Factor w/ 4 levels "2010/11","2013/14",..: 1 3 4 4 4 3 2 
    ..- attr(*, "names")= chr "b1" "b2" "b3" "b4" ... 
$ Var4   : Factor w/ 2 levels "1","2": 2 1 1 1 1 2 2 
    ..- attr(*, "names")= chr "b1" "b2" "b3" "b4" ... 

Я хочу присоединиться к этой dataframes с rbind, но я получаю сообщение об ошибке, потому что классы разные. Таким образом, я изменил классы:

class(DataFrame2[,1])<-class(DataFrame1[,1]) 
class(DataFrame2[,2])<-class(DataFrame1[,2]) 
class(DataFrame2[,3])<-class(DataFrame1[,3]) 
class(DataFrame2[,4])<-class(DataFrame1[,4]) 

Но классы все-таки разные:

> str(DataFrame2) 
'data.frame': 7 obs. of 30 variables: 
$ Var1   : atomic 1 3 5 5 5 4 2 
    ..- attr(*, "levels")= chr "20102" "20132" "20141" "20142" ... 
$ Var2   : Factor w/ 6 levels "270620","28078",..: 2 3 3 4 5 6 1 
$ Var3   : Factor w/ 4 levels "2010/11","2013/14",..: 1 3 4 4 4 3 2 
$ Var4   : Factor w/ 2 levels "1","2": 2 1 1 1 1 2 2 

Если я rbind я получаю ту же ошибку.

Почему в числовом и целочисленном классах появляется атомный?

Что я могу сделать для классов DataFrame2 таким же, как в DataFrame1?

+0

Do 'DataFrame2 [, 1] <- as.numeric (as.character (DataFrame2 [, 1])) '. – ytk

+0

@ytk, спасибо, он работает – user4563174

ответ

1

Проблема заключается в том, что первая колонка вашего второго data.frame - это factor. Попробуйте преобразовать его в integer с помощью

DataFrame2$Var1 <- as.integer(as.character(DataFrame2$Var1)) 

Обратите внимание, что Absolutly необходимо сначала преобразовать в character. Это связано со следующим поведением:

a <- as.factor(200:205) 
as.integer(a) 
[1] 1 2 3 4 5 6 

Однако вызова as.character() первый дает желаемый результат:

as.integer(as.character(a)) 
[1] 200 201 202 203 204 205 
Смежные вопросы