2013-08-19 5 views
0

Я уверен, что есть ответы на мой вопрос, но я не могу найти то, что работает, и я абсолютно новый для R, так извиняюсь за избыточность!Транспонирование и слияние наборов данных в R

У меня есть огромный набор данных - 17K с 35 переменными. Это был файл txt, который я импортировал и принуждал к as.mmatrix. 1-й столбец имеет знаковые значения, а остальные 34 столбца имеют числовые значения.

Структура -

>str(data_m) 
chr [1:17933, 1:35] "RAB12" "TRIM52" "C1orf86" "PLAC9" "MORN3" "LOC643783" "LOC389541" "OAZ2" ... 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : chr [1:35] "Name" "X118" "X12" "X21" ... 

Теперь есть еще одна маленькая длинная форма набора данных с 2-мя колоннами - Ид и пола.

> str(data_maleids) 
'data.frame': 24 obs. of 2 variables: 
$ id : Factor w/ 34 levels "X118","X12","X21",..: 8 23 9 19 10 7 5 4 2 30 ... 
$ gender: Factor w/ 2 levels "female","male": 2 2 2 2 2 2 2 2 2 2 ...` 

Например. -

row.names id gender 
1 1   X37 male 
2 2   X64 male 

Все, что я хочу сделать, это подмножество 1-й набор данных только для тех идентификаторов (X37, X64 и т.д.), которые присутствуют во 2-й набор данных.

Я пробовал переносить больший набор данных, но это дает мне проблемы с именами столбцов, и я не могу найти способ обойти это.

+2

Когда вы читаете в своей первой информационной кадре, не принуждайте ее к матрице. Когда вы читаете в своем втором фрейме данных (только с идентификатором и полом), установите 'stringsAsFactors = FALSE'. Затем просто выполните 'df1 [df1 $ Name% in% df2 $ id,]'. – Thomas

+0

Это должно быть colnames (df1), а не $ Name right? Поскольку id в df2 - это фактически имена столбцов в df1. Но логика сработала. Благодаря ! Однако это приводит к еще одному шагу слияния 1-го столбца $ Name из исходного набора данных, который снова работает, но это не лучший способ сделать это, я думаю. Должен быть способ сохранить столбец под названием Name, в то время как подмножество – user2695213

ответ

2

Первый комментарий к вашему утверждению «1-й столбец имеет знаковые значения, а остальные 34 столбца имеют числовые значения». data_m - это матрица, поэтому все столбцы одного типа. В этом случае символ. Вы можете увидеть его на выходе str(). Подумайте о матрице в R как вектор, который расположен в нескольких столбцах.

Во-вторых, я советую вам использовать пакет data.table (вы должны установить его, если у вас его еще нет) для этой задачи. Эскиз синтаксиса будет что-то вроде этого:.

  1. Прочитайте данные Существует хорошая функция fread() в пакете data.table для чтения данных из текстовых файлов в качестве data.table объекта: data_m <- fread("file.name.txt")
  2. Key data_m по переменной id: setkey(data_m, id)
  3. Сделайте векторный идентификатор из data_maleids: ids <- sort(unique(data_maleids$id)).
  4. Выберите нужный вам случай: data_m[id %in% ids].
+1

Привет .. Я попытался установить пакет data.table, но R canant, похоже, нашел функцию fread (v 3.0.1) «Ошибка: не удалось найти функцию« fread », – user2695213

+2

Вам необходимо загрузить пакет, чтобы он был доступен во время сеанса с 'require (data.table)'. – djhurio