дубликаты 'row.names' не разрешены - все равно меня убивает - PullRequest
0 голосов
/ 03 октября 2018

Имеется следующий импорт:

d5_17cou <- 
  read.table("[enter link description here][1]c_all_d5_imp.dat",
   header=TRUE, sep="\t", na.strings="", dec=",", row.names=1, comment.char="",  strip.white=TRUE)

"row.names" установлены в 1 для установки 1-го столбца в качестве имени строки.

Я хочу выполнить множественный анализ соответствия (MCA) с использованием PCAmixdata.

Я устанавливаю необходимые переменные в качестве факторов, устанавливаю различные параметры:

d5_17cou <- within(d5_17cou, {
  a025r <- as.factor(a025r)
  a034r <- as.factor(a034r)
  a038r <- as.factor(a038r)
  a040r <- as.factor(a040r)
  a041r <- as.factor(a041r)
  a042r <- as.factor(a042r)
  c001r <- as.factor(c001r)
  c024r <- as.factor(c024r)
  c037r <- as.factor(c037r)
  charity <- as.factor(charity)
  clz.outgr4 <- as.factor(clz.outgr4)
  d019r <- as.factor(d019r)
  d023r <- as.factor(d023r)
  e014r <- as.factor(e014r)
  e018r <- as.factor(e018r)
  e035r <- as.factor(e035r)
  e114r <- as.factor(e114r)
  e143r <- as.factor(e143r)
  e146r <- as.factor(e146r)
  e190rr <- as.factor(e190rr)
  f022r <- as.factor(f022r)
  f028r <- as.factor(f028r)
  f051r <- as.factor(f051r)
  f064r <- as.factor(f064r)
  f066r <- as.factor(f066r)
  f121r <- as.factor(f121r)
  helpef <- as.factor(helpef)
  jpay <- as.factor(jpay)
  prices1 <- as.factor(prices1)
  psub.all <- as.factor(psub.all)
})
weight.row <- d5_17cou[,c(4)]
X.quali <- d5_17cou[,c(7:36)]

Затем следует командная строка MCA:

mca <- PCAmix(X.quanti=NULL,X.quali,ndim=5,weight.col=NULL,weight.row,graph=FALSE)

Затем следуетсообщение об ошибке: дубликаты 'row.names' не допускаются .

Что странно, учитывая, что код работал пару лет назад с точно такими же данными.Не в этот раз.

Вы просмотрели большую часть архива здесь на предмет ошибки "duplicate row.names", перепробовали множество решений там и все равно получили бы ту же ошибку. Этосказать, что совет типа «попробуйте поискать ту или иную ветку», вероятно, не поможет - то, что мне нужно, более конкретно.

Еще более странно, после добавления

row.names=1

Подкоманда read.table сегодня днем, все работало нормально - но не вечером, когда я вернулся к заданию, используя тот же сценарий.

Данные в приложении прилагаются.

Файл данных [Google Drive] Заранее спасибо.

1 Ответ

0 голосов
/ 03 октября 2018

Я полагаю, что проблема вызвана тем фактом, что имена строк являются числами, например, 199990901000,, которые больше, чем наибольшее целочисленное значение .Machine$integer.max, равное 2147483647.Хотя имена строк в data.frame являются символами типа, это может вызвать проблемы на последующих этапах обработки, возможно.

Поэтому я предлагаю рассматривать первый столбец как обычный столбец данных, а не как row.names.

Код ниже работал для меня, чтобы прочитать файл и привести много столбцов к фактору:

library(data.table)
url <- sprintf("https://docs.google.com/uc?id=%s&export=download", 
               "1NwcvwwaPLWaSmKOuQiVrWAK4iKn9f10S")
d5_17cou  <- fread(url, dec = ",", colClasses = list(character = 1L))
cols <- names(d5_17cou)[8:37]
d5_17cou[, (cols) := lapply(.SD, as.factor), .SDcols = cols]
str(d5_17cou)
Classes ‘data.table’ and 'data.frame':    22431 obs. of  39 variables:
 $ S007      : chr  "199905600001" "199905600002" "199905600003" "199905600004" ...
 $ S003A     : int  56 56 56 56 56 56 56 56 56 56 ...
 $ cou.year  : int  561999 561999 561999 561999 561999 561999 561999 561999 561999 561999 ...
 $ year      : int  1999 1999 1999 1999 1999 1999 1999 1999 1999 1999 ...
 $ s017ay    : num  0.692 1.051 1.051 0.752 0.752 ...
 $ uitem     : int  1 2 3 4 5 6 7 8 9 10 ...
 $ item      : int  1 2 3 4 5 6 7 8 9 10 ...
 $ a025r     : Factor w/ 2 levels "1","3": 2 2 2 2 1 1 1 2 1 2 ...
 $ a034r     : Factor w/ 2 levels "1","3": 1 2 1 1 1 2 1 2 1 1 ...
 $ a038r     : Factor w/ 2 levels "1","3": 1 2 2 2 2 1 2 1 2 1 ...
 $ a040r     : Factor w/ 2 levels "1","3": 1 1 1 1 1 1 1 1 1 1 ...
 $ a041r     : Factor w/ 2 levels "1","3": 1 1 1 1 1 1 1 1 1 1 ...
 $ a042r     : Factor w/ 2 levels "1","3": 2 1 2 2 1 1 1 1 1 1 ...
 $ c001r     : Factor w/ 2 levels "1","3": 1 1 2 1 1 1 1 1 1 1 ...
 $ c024r     : Factor w/ 2 levels "1","3": 2 2 2 2 1 2 2 1 2 2 ...
 $ c037r     : Factor w/ 2 levels "1","3": 1 1 1 1 2 2 1 2 2 1 ...
 $ charity   : Factor w/ 2 levels "1","3": 1 1 2 1 1 1 1 2 2 2 ...
 $ clz.outgr4: Factor w/ 2 levels "1","3": 2 1 1 1 1 1 1 2 1 1 ...
 $ d019r     : Factor w/ 2 levels "1","3": 2 2 2 2 2 2 2 2 2 2 ...
 $ d023r     : Factor w/ 2 levels "1","3": 2 2 1 1 2 2 2 2 2 2 ...
 $ e014r     : Factor w/ 2 levels "1","3": 1 2 1 1 2 2 2 2 2 2 ...
 $ e018r     : Factor w/ 2 levels "1","3": 2 2 2 2 1 1 1 2 2 1 ...
 $ e035r     : Factor w/ 2 levels "1","3": 2 2 1 2 2 1 1 2 2 2 ...
 $ e114r     : Factor w/ 2 levels "1","3": 2 1 1 1 1 1 1 1 1 1 ...
 $ e143r     : Factor w/ 2 levels "1","3": 2 1 1 2 2 1 1 1 1 2 ...
 $ e146r     : Factor w/ 2 levels "1","3": 1 1 2 1 1 2 1 1 2 1 ...
 $ e190rr    : Factor w/ 2 levels "1","3": 2 1 2 2 2 1 2 2 2 2 ...
 $ f022r     : Factor w/ 2 levels "1","3": 1 1 1 2 1 1 1 1 1 1 ...
 $ f028r     : Factor w/ 2 levels "1","3": 1 2 2 2 2 1 2 1 1 1 ...
 $ f051r     : Factor w/ 2 levels "1","3": 1 2 2 2 2 1 1 2 1 1 ...
 $ f064r     : Factor w/ 2 levels "1","3": 1 2 2 2 1 1 2 2 2 1 ...
 $ f066r     : Factor w/ 2 levels "1","3": 1 2 2 2 2 1 2 2 2 2 ...
 $ f121r     : Factor w/ 2 levels "1","3": 1 2 2 1 1 2 2 1 2 2 ...
 $ helpef    : Factor w/ 2 levels "1","3": 1 2 2 2 2 2 2 2 2 2 ...
 $ jpay      : Factor w/ 2 levels "1","3": 1 1 1 1 1 1 1 1 1 1 ...
 $ prices1   : Factor w/ 2 levels "1","3": 1 1 1 1 1 1 1 1 1 1 ...
 $ psub.all  : Factor w/ 2 levels "1","3": 2 1 1 1 1 2 1 2 2 1 ...
 $ oriend    : int  1 1 1 1 1 1 1 1 1 1 ...
 $ dupl      : int  0 0 0 0 0 0 0 0 0 0 ...
 - attr(*, ".internal.selfref")=<externalptr>

Обратите внимание, что первый столбец S007явно читается как символьный столбец (в противном случае fread() использует int64) и теперь является частью набора данных.Следовательно, нумерация всех последующих столбцов изменяется.

Кстати, fread() на намного быстрее, чем read.table().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...