2016-05-13 3 views
0

Вопрос о манипуляциях с dataframe. а не HW, хотя я буду рассматривать его как проблему HW. Я знаю, что есть три способа сделать это, но я не могу найти его.создание подматрицы/dataframe R

Проблема
У меня есть dataframe с 10 колоннами и тысячи строк, он заполнен некоторыми данными. У меня есть 1-столбцовая матрица B с 1 колонкой и тысячей строк, она заполняется 1 и 0 (TRUE или FALSE).

Цель: создать новый dataframe C, который содержит только строки в , что имело значение TRUE, в эквивалентном индексе матрицы C.

(Более уточнение в случае, если его не ясно) я выполнял операции по , сохраняются результат (истина или ложь) в dataframe колонка (такой же длины, конечно) и теперь хочу извлечь, что в своем собственной матрицы.
Размер новой матрицы - сумма (B) X 10 (только логический вывод)

Спасибо вам за чтение! Ваша помощь приветствуется.

Пример

Dataframe

Name State metric1 metric2 

Joe  MA  23  25 
Moe  AZ  123  2971 
Bo  CA  938  387 
Yo  UT  1  3 

матрица В

1 
0 
1 
0 

Желаемая Выход (dataframe С)

Name State metric1 metric2 

Joe  MA  23  25 
Bo  CA  938  387 
+2

Лучше включать воспроизводимый пример ('dput') и ожидаемый результат, чтобы сделать его проще для других, чтобы помочь вам. – Sotos

+1

См. Следующую ссылку на создание [воспроизводимого примера] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – lmo

+0

Благодарим вас за участие. Я прочитал совет Сотоса и произвел это. Это достаточно? Я думаю, что это очень ясно, но, очевидно, я так думаю. Пожалуйста, дайте мне знать, если приведенный пример не дает понять. – OctaveParango

ответ

1

Почему не просто

A <- data.frame(cbind(A=1:10,B=21:30,C=41:50)) 
B <- data.frame(D=rep(c(TRUE,FALSE),5)) 
C <- A[B$D,] 

давая

> A 
    A B C 
1 1 21 41 
2 2 22 42 
3 3 23 43 
4 4 24 44 
5 5 25 45 
6 6 26 46 
7 7 27 47 
8 8 28 48 
9 9 29 49 
10 10 30 50 
> B 
     D 
1 TRUE 
2 FALSE 
3 TRUE 
4 FALSE 
5 TRUE 
6 FALSE 
7 TRUE 
8 FALSE 
9 TRUE 
10 FALSE 
> C 
    A B C 
1 1 21 41 
3 3 23 43 
5 5 25 45 
7 7 27 47 
9 9 29 49 

EDIT после редактирования параметров порядка

A <- data.frame(cbind(name=c("Joe", "Moe", "Bo" , "Yo"), 
         State=c("MA","AZ","CA","UT"), 
         metric1 = c(23,123,938,1), 
         metric2 = c(25,2971,387,3))) 
B <- c(1,0,1,0) 
C <- A[B==1,] 
C 

дает

> C 
    name State metric1 metric2 
1 Joe MA  23  25 
3 Bo CA  938  387 
+1

И если вам не нравятся идентификаторы строк, вы всегда можете вернуть их обратно к последовательному через 'rownames (C) <- 1: nrow (C)' – rbm

+0

Да, это именно то, что я искал. Спасибо за помощь и время! – OctaveParango

1

Альтернатива использованием data.table:

library(data.table) 

# convert you dataset into a data.table 
    setDT(A) 

# create a dummy variable (TRUE or FALSE) using operations other columns 
    A[ , logical := sum(metric1, metric1) > 50 ] 

# subset the data 
    A[ logical == T] 

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

  • Нет связанных вопросов^_^