2016-05-16 1 views
0

Как выбрать определенные строки; имена конкретных столбцов; и другая группа имен конкретных столбцов на основе вектора?Выберите строки, столбцы и другую группу столбцов на основе вектора

Мои данные:

#my data 
ID<-c(1,2,3,4,5,6) 
Month<-c('Jan','Jan','Mar','Feb','Mar','Jan') 
Number<-c(6,5,4,3,2,1) 
Color<-c('Red','Red','Blue','Green','Green','Purple') 
Q1<-c(0,1,NA,1,0,1) 
Q2<-c(1,1,NA,1,NA,1) 
Q3<-c(NA,0,0,1,0,1) 

mydata<-cbind.data.frame(ID,Month,Number,Color,Q1,Q2,Q3) 

#my vector: 
Jan.vector<-c('Q1','Q3') 

У меня есть (MYDATA):

enter image description here

  1. Я хочу, чтобы выбрать строки, где Месяц 'Jan'
  2. И выбрать имена столбцов 'ID' и 'Month'
  3. И выберите имена столбцов, которые находятся в t он вектор «Янвент». I не может указать имена столбцов, поскольку они будут изменены.
  4. Я хочу, чтобы результирующие строки и только столбцы, все в одном наборе данных, как показано ниже:

Я хочу (mydata2):

enter image description here

(Справочная информация: Мой фактический набор данных имеет сотни столбцов , и , и мне нужно будет выбрать столбцы на основе вектора, который будет меняться ежемесячно (т. е. Q1, Q3 ...). Вектор будет единственным, что изменится. Я не буду знать номера вопросов, которые вам нужны, и вам понадобятся полагаться на вектор, чтобы выбрать номера вопросов. Порядок столбцов wi 11), также).

ответ

1

, если я правильно вас понял:

> monthNum <- 1 
> wantedCol <- c('ID','Month','Color','Q1','Q3') 
> mydata[ mydata$Month==substring(month.name[monthNum],1,3),match(wantedCol,names(mydata))] 
    ID Month Color Q1 Q3 
1 1 Jan Red 0 NA 
2 2 Jan Red 1 0 
6 6 Jan Purple 1 1 

или - вы можете указать месяц или месяцы:

> monthName <- c('Jan','Mar') 
> wantedCol <- c('ID','Month','Color','Q1','Q3') 
> mydata[ mydata$Month %in% monthName,match(wantedCol,names(mydata))] 
    ID Month Color Q1 Q3 
1 1 Jan Red 0 NA 
2 2 Jan Red 1 0 
3 3 Mar Blue NA 0 
5 5 Mar Green 0 0 
6 6 Jan Purple 1 1 

или вы можете заявить свои столбцы индексами:

> monthName <- c('Jan','Mar') 
> wantedCol <- c(1,2,4,5,7) 
> mydata[ mydata$Month %in% monthName,wantedCol] 
    ID Month Color Q1 Q3 
1 1 Jan Red 0 NA 
2 2 Jan Red 1 0 
3 3 Mar Blue NA 0 
5 5 Mar Green 0 0 
6 6 Jan Purple 1 1 

или если вы всегда хотите ID, месяц и цвет:

> monthNum <- 1 
> wantedColStat <- c('ID','Month','Color') 
> wantedColDyna <- c('Q1','Q3') 
> mydata[ mydata$Month==substring(month.name[monthNum],1,3),match(c(wantedColStat,wantedColDyna),names(mydata))] 
    ID Month Color Q1 Q3 
1 1 Jan Red 0 NA 
2 2 Jan Red 1 0 
6 6 Jan Purple 1 1 
+0

Спасибо за помощь! Есть ли способ выбрать дополнительные имена столбцов, которые не находятся в векторе 'wantedCol'? Например, вектор может включать только имена столбцов Q1 и Q3. Но могу ли я перечислить имена других столбцов (ID, Месяц, Цвет) по имени? Или, может Q1 и Q3 быть в своем собственном векторе, а другие имена столбцов находятся в отдельном векторе? – Mary

+0

уверен .... я отредактирую –