2013-03-15 4 views
0

Я относительный новичок R. Я искал последние две рабочие дни, пытаясь понять это и потерпел неудачу. У меня есть список факторов, генерируемых функцией. У меня 9 элементов в списке разной длины.печать списка данных кадров

>summary(list_dataframes) 
     Length Class Mode 
[1,] 1757 factor numeric 
[2,] 1776 factor numeric 
[3,] 1737 factor numeric 
[4,] 1766 factor numeric 
[5,] 1783 factor numeric 
[6,] 1751 factor numeric 
[7,] 1744 factor numeric 
[8,] 1749 factor numeric 
[9,] 1757 factor numeric 

Часть выборки данных, как это выходит:

list_dataframes

[[1]] 

[1] 1776234_at 1779003_at 1776344_at 1777664_at 1772541_at 1774525_at 

[[2]] 

[1] 1771703_at 1776299_at 1772744_at 1780116_at 1775451_at 1778821_at 

[7] 1774342_at 

[[3]] 

[1] 1780116_at 1776262_at 1775451_at 1780200_at 1775704_at 

Я не знаю, почему он говорит, что режим является "числовой". Отдельные записи представляют собой сочетание чисел и букв типа «S35_at».

Я хотел бы сделать это в таблице из девяти столбцов и 1783 строк без создания повторяющихся значений. (Поэтому я попытался использовать do.call, и это не сработало. В итоге у меня был беспорядок, полный дубликатов). Более короткие могут иметь NA в пустых пространствах или быть пустыми.

Мне нужно иметь возможность в конечном итоге с чем-то, что я могу положить в лист с расширением.

Должен быть способ сделать это. Спасибо!

Я предполагаю, что я должен добавить, что он изначально вышел как кадры данных, когда у меня было четыре столбца данных, но мне нужен только один столбец данных, и когда я подмножал функцию, которая создает этот список, чтобы создать только один столбец I на самом деле это, по-видимому, больше не является фреймворком данных.

dput(head(list_dataframes)) 
list(structure(c(3605L, 5065L, 3663L, 4349L, 1655L, 2700L, 5692L, plus many more 
.Label = c("1769308_at", 
"1769311_at", "1769312_at", "1769313_at", "1769314_at", "1769317_at", plus many more 
this pattern is repeated nine more times 

То, что я пытаюсь сделать, это создать таблицу, которая будет выглядеть следующим образом:

a= xyz,tuv,efg,hij,def 
b= xyz,tuv,efg 
c= tuv,efg,hij,def 

То, что я хочу сделать это таблица, которая является

a b c 
xyz xyz tuv 
tuv tuv efg 
efg efg hij 
hij NA NA 
NA NA NA 

NA could be blank as well. 

После большого чтения в разделе руководства по спискам я определил, что я создал скрытый список списков. У него было девять предметов с данными, которые я хотел похоронить двумя слоями вниз, чтобы увидеть, что я должен был использовать [[1]]. Кроме того, из-за чего-то в R, что приводит к тому, что один кадр данных столбца становится фактором вместо того, чтобы оставаться в кадре данных, он был еще более сложным. Чтобы исправить это (вроде), я добавил один шаг в моем уравнении, чтобы изменить этот фактор на фрейм данных.

После этого, когда я использовал lapply для генерации моего результата, по крайней мере проблема с фактором была решена. Затем я мог бы выполнить следующие шаги, чтобы вытащить фреймы данных.

first <- list_dataframes[[1]] 
second <- list_dataframes[[2]] 
third <- list_dataframes[[3]] 
fourth <- list_dataframes[[4]] 
fifth <- list_dataframes[[5]] 
sixth <- list_dataframes[[6]] 
seventh <- list_dataframes[[7]] 
eighth <- list_dataframes[[8]] 
nineth <- list_dataframes[[9]] 

all_results <- cbindX(first,second,third,fourth,fifth,sixth,seventh, eighth,nineth) 

Я мог бы написать файл csv с помощью write.csv и получить правильный результат, который я получил после. Я думаю, у меня есть мой ответ. Я имею в виду, что сейчас это работает.

Однако я все еще думаю, что у меня что-то не хватает, делая эту работу оптимально, хотя теперь она дает мне правильный результат, который я получил после.

+0

Возможно опубликовать воспроизводимый пример, показывающий подмножество набора данных, возможно, с 10-20 строками. –

+0

В данных данных существует очень ограниченная степень перекрытия. Ваше первоначальное описание показало высокую степень перекрытия. Уточнить? –

+0

Это список вещей, над которыми я работаю, которые имеют определенную ценность, которая делает их значительными. Подмножества взяты из того же большого набора из 4500, и между ними существует некоторое совпадение, но не много. Проблема с дубликатами в do.call заключается в том, что у меня было бы 50 или 60 дубликатов в последних наборах столбцов. Я мог бы вручную удалить их из электронной таблицы, но это может привести к тому, что вы научитесь программировать вещи. –

ответ

1

Переменные фактор-класса представляют собой векторы целочисленного режима со связанным атрибутом, который является символьным вектором, определяющим метки, которые будут использоваться при отображении целочисленных значений. Я думаю, что самым безопасным способом связать их вместе было бы преобразование столбцов факторов в класс символов, а затем в merge с all=TRUE. Почему бы не опубликовать простой пример с тремя файлами или факторами ...Я не могу точно определить структуру из итогового вывода ... длиной 10, 9 и 8, который имеет какой-то уровень сложности в ваших данных?

Если вы хотите, чтобы сделать их все факторы, с общим набором уровней, а затем использовать это:

shared_levels <- unique(c(unlist(lapply(list_dataframes)))) 
length(shared_levels) 
new_list <- lapply(list_dataframes, factor, levels=shared_levels) 

Как указано в комментарии, я до сих пор не понимаю, что за столом вы представить себе производится. Нужен конкретный пример.

+0

Сделал это, я думаю, спасибо! –

+0

Я попытался изменить преобразование столбцов факторов в класс символов, но я смог изменить режим. Как мне это сделать? –

+0

Вы должны написать 'dput (head (object))', поэтому есть воспроизводимый пример. Печатная продукция не предполагает, что это факторы, поскольку ни один уровень не печатается. Функция, которая преобразует факторы в символ, является 'as.character'. –

Смежные вопросы