2014-12-18 11 views
9

Mam większy zbiór danych według tej samej kolejności, unikalnej kolumny daty, danych, unikalnej kolumny daty, daty itp. Próbuję nie tylko podzestawać kolumna danych według nazwy, ale także kolumna z unikalną datą. Poniższy kod wybiera kolumny w oparciu o listę nazw, która jest częścią tego, co chcę, ale wszelkie pomysły, w jaki sposób mogę pobrać kolumnę tuż przed kolumną podsegmentową?Podzbiór kolumn na podstawie listy nazw kolumn i przyniesienie kolumny przed nią

Chcemy skończyć z DF zawierającym kolumny Date1, Fire, Date3, Earth (używając tylko NameList).

Oto mój kod powtarzalne:

Cnames <- c("Date1","Fire","Date2","Water","Date3","Earth") 
MAINDF <- data.frame(replicate(6,runif(120,-0.03,0.03))) 
colnames(MAINDF) <- Cnames 

NameList <- c("Fire","Earth") 

NewDF <- MAINDF[,colnames(MAINDF) %in% NameList] 

Odpowiedz

6

Jak o

NameList <- c("Fire","Earth") 

idx <- match(NameList, names(MAINDF)) 
idx <- sort(c(idx-1, idx)) 

NewDF <- MAINDF[,idx] 

Tutaj używamy match() znaleźć indeks żądanej kolumny, a następnie możemy użyć indeksu odejmowanie chwycić kolumnę przed nim

6

Zastosowanie which aby uzyskać numery kolumn z nazwami, a potem to tylko prosta arytmetyka:

col.num <- which(colnames(MAINDF) %in% NameList) 
NewDF <- MAINDF[,sort(c(col.num, col.num - 1))] 

Produkuje

  Date1   Fire  Date3  Earth 
1 -0.010908003 0.007700453 -0.022778726 -0.016413307 
2 0.022300509 0.021341360 0.014204445 -0.004492150 
3 -0.021544992 0.014187158 -0.015174048 -0.000495121 
4 -0.010600955 -0.006960160 -0.024535954 -0.024210771 
5 -0.004694499 0.007198620 0.005543146 -0.021676692 
6 -0.010623787 0.015977135 -0.027741109 -0.021102651 
... 
Powiązane problemy