Влияют ли уровни фрейма данных на экспорт набора данных из R?

У меня есть 2142 строки и 9 столбцов в моем фрейме данных. Когда я вызываю head(df), фрейм данных выглядит нормально, как показано ниже:

Local Identifier Local System Parent ID Storage Type Capacity Movable? Storage Unit Order Number
2209       NEZ0037-76 FreezerWorks   NEZ0037       BoxPos        1        N                        76
2210       NEZ0037-77 FreezerWorks   NEZ0037       BoxPos        1        N                        77
2211       NEZ0037-78 FreezerWorks   NEZ0037       BoxPos        1        N                        78
2212       NEZ0037-79 FreezerWorks   NEZ0037       BoxPos        1        N                        79
2213       NEZ0037-80 FreezerWorks   NEZ0037       BoxPos        1        N                        80
2214       NEZ0037-81 FreezerWorks   NEZ0037       BoxPos        1        N                        81
     Description Storage.Label
2209                        I4
2210                        I5
2211                        I6
2212                        I7
2213                        I8
2214                        I9`

Однако, когда я вызываю write.csv или write.table, я получаю бессвязный вывод. Что-то вроде ниже:

Local Identifier    Local System    Parent ID   Storage Type    Capacity    Movable 
1   NEZ0011 FreezerWorks    NEZ0011 Box-9X9 81  Y
39  40  41  42  43  44  45
80  81   "Box-9X9 NEZ0014"  1   2   3   4
38  39  40  41  42  43  44
79  80  81   "Box-9X9 NEZ0017"  1   2   3
37  38  39  40  41  42  43
78  79  80  81   "Box-9X9 NEZ0020"  1   2
36  37  38  39  40  41  42
77  78  79  80  81   "Box-9X9 NEZ0023"  1
35  36  37  38  39  40  41
76  77  78  79  80  81   "Box-9X9 NEZ0026"`

Вызов sapply(df, class) показывает, что все столбцы во фрейме данных имеют [1] "factor", кроме $Storage.Level, который равен [1] "data.table" "data.frame". Когда я вызвал unlist для $Storage.Level, вывод стал лучше, но изменил значение в столбце. Я также пробовал df <- data.frame(df, stringsAsFactors=FALSE) безуспешно. Также data.frame(lapply(df, factor)) как предложено в здесь и as.data.frame в потоке здесь не Работа. Есть ли способ удалить $Storage.Level из списка, не изменяя значения в столбце? Или, может быть, есть способ перейти с уровня "data.table" "data.frame" на фактор и безопасно вывести данные.

R версия 3.0.3 (2014-03-06)


person sedeh    schedule 03.07.2014    source источник
comment
Можете ли вы правильно отформатировать вывод, пожалуйста? Это очень нечитаемо и трудно определить, что происходит не так.   -  person Roman Luštrik    schedule 03.07.2014
comment
Кажется, у вас есть таблица данных внутри фрейма данных (это переменная класса "data.table" "data.frame", которую вы называете Storage.Level, но на выходе она отображается как Storage.Label). Это вполне может быть причиной. Можете ли вы попробовать временно удалить эту переменную, а затем сохранить остальные данные?   -  person konvas    schedule 03.07.2014


Ответы (1)


Похоже, у вас есть что-то вроде этого:

df <- data.frame(A = 1:2, C = 3:4)
df$AC <- data.table(df)
str(df)
# 'data.frame':  2 obs. of  3 variables:
#  $ A : int  1 2
#  $ C : int  3 4
#  $ AC:Classes ‘data.table’ and 'data.frame':  2 obs. of  2 variables:
#   ..$ A: int  1 2
#   ..$ C: int  3 4
#   ..- attr(*, ".internal.selfref")=<externalptr> 
sapply(df, class)
# $A
# [1] "integer"
# 
# $C
# [1] "integer"
# 
# $AC
# [1] "data.table" "data.frame"

В этом случае у вас возникнут проблемы с записью в CSV-файл.

Попробуйте сначала вызвать do.call(data.frame, your_data_frame), чтобы увидеть, достаточно ли это «выравнивает» ваш data.frame, как в этом примере.

str(do.call(data.frame, df))
# 'data.frame':  2 obs. of  4 variables:
#  $ A   : int  1 2
#  $ C   : int  3 4
#  $ AC.A: int  1 2
#  $ AC.C: int  3 4

Вы должны без проблем записать это в файл csv.

person A5C1D2H2I1M1N2O1R2T1    schedule 10.07.2014