2014-12-18 25 views
9

Tôi có tập dữ liệu lớn hơn theo cùng một thứ tự, cột ngày, dữ liệu, cột ngày duy nhất, ngày, v.v. Tôi đang cố gắng không chỉ đặt cột dữ liệu theo tên nhưng cột ngày duy nhất cũng có. Mã dưới đây chọn cột dựa trên danh sách tên, là một phần của những gì tôi muốn nhưng bất kỳ ý tưởng nào về cách tôi có thể lấy cột ngay trước cột subsetted?Cột tập hợp con dựa trên danh sách tên cột và đưa cột trước cột

Tìm cách kết thúc với DF chứa cột Date1, Fire, Date3, Earth (chỉ sử dụng NameList).

Đây là mã tái sản xuất của tôi:

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] 

Trả lời

6

Còn khoảng

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

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

NewDF <- MAINDF[,idx] 

Ở đây chúng tôi sử dụng match() để tìm chỉ mục của cột mong muốn và sau đó chúng tôi có thể sử dụng phép trừ chỉ mục để lấy cột trước cột

6

Sử dụng which để có được những con số cột từ tên, và sau đó nó chỉ đơn giản số học:

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

Tạo

  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 
... 
Các vấn đề liên quan