случайная выборка из кадра данных и вывод в Excel - PullRequest
1 голос
/ 02 сентября 2010

Я беру случайную выборку с фрейма данных (а), который у меня есть.Квалификатор a [, 1] должен быть экспортирован в Excel.Однако я в беде.

str(a)

'data.frame':   2299 obs. of  5 variables:
 $ A          : Factor w/ 2284 levels "01012223427",..: 1339 78 779 1590 1687 64 1034 633 1321 109 


a[sample(a[,1],300),]->q

В результате получается 300 случайных выборок, но некоторые из них являются NA.Любые идеи?

q[,1]->r

str(r)
 Factor w/ 2284 levels "01012223427",..: 85 1162 1886 549 1996 789 185 321 632 2273

Мне нужно получить вектор r в формате 01012223427 в Excel, но при выполнении write.csv(r,"r.csv") в каждой ячейке столбца будет получен файл с конкатенацией 1, "01012223427" и т.д.Я пытался write.csv(as.numeric(r),"r.csv") не помочь с самими факторами, которые выводятся.Как я могу это сделать?

- edit

write.csv2 (r, "300.csv", row.names = F) решил мои проблемы, но я все еще не уверен сОтносительно того, почему НС введены ...

// M

Ответы [ 2 ]

5 голосов
/ 02 сентября 2010

Чтобы преобразовать множитель чисел в числовое, вы должны сначала изменить его на символ, в противном случае вы получите внутренние номера фактора, а не метки уровня:нечисловые символы в уровнях фактора.

1 голос
/ 02 сентября 2010

Я бы также проверил, почему у вас есть фактор в первую очередь.Мне кажется, что вы читаете его из какого-то текстового файла и что где-то есть либо пробелы, либо текст (пробел, точка, табуляция, буквы NA, ...), которые заставляют R видеть целоестолбец как символ, и преобразовать его в фактор при использовании read.csv или лайков.

Если вы нашли его, вы также знаете, почему вы получаете NA, и вы можете исправить его, прежде чем сохранять кадр данных в текстовый файл.Проверьте параметр stringsAsFactors = F в read.table () и read.csv () (или, альтернативно, as.is = T в read.csv).

Рядом с этим фрагмент кода:

a[sample(a[,1],300),]->q

не делает то, что вы думаете, я думаю.Я бы использовал сами индексы, что-то в строке:

a[sample.int(dim(a)[1],300),] -> q

Если a станет числовым, ваш приведенный выше код больше не будет работать.Он будет принимать значения [, 1], одним из которых является 01012223427. Таким образом, вы получите ошибку, поскольку нет строки с этим индексным номером.Кроме того, при передаче [, 1] в качестве символа используемый вами код будет поврежден.

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