2016-08-24 26 views
5

Sütun isimlerini bir işlevle program aracılığıyla aktarmaya çalışıyorum, böylece dplyr içinde seçilebilecekler. Sütun adları değişeceğinden, select_ seçme işlevinin standart değerlendirme sürümünü kullanmaya çalıştım. onlar soruna neden olduğunu düşünüyorum + ve - karakterler içeren sütun adları kendilerini biraz komik. Aşağıda, hatayı çoğaltan basit bir örnek verilmiştir.dplyr sütun adlarını nasıl iletilir seçilmeden seçin

library(tibble) 
library(dplyr) 
data <- data_frame(target_id = 'xyz', 
        `CH4+Sulfate-1` = 1.2, 
        `CH4+Sulfate-2` = 2, 
        `CH4+Sulfate-3` = 3) 
columns <- c('CH4+Sulfate-1', 'CH4+Sulfate-2', 'CH4+Sulfate-3') 
select_(data, .dots = columns) 

Ben isimleri değerlendirdi yerine dize olarak atılıyor inanmak götürüyor aşağıdaki hatayı

Error in eval(expr, envir, enclos) : object 'CH4' not found 

olsun. Tablonun sütunlarını yeniden adlandırmak zorunda kalmadan bu sorunu nasıl çözebilirim?

+1

Hmmm .... iyi bir soru - 'base [columns] 'R işleminden tamam, bu yüzden evrensel bir sorun değil. Ayrıca dplyr :: select (veri, eşleşme (sütunlar, adlar (veri))) 'ile de etrafta hackleyebilirsiniz, ancak başka bir fikrim yok. – thelatemail

+2

bir kesinlikle çok az örnek onu kırmak için yeterlidir - 'dat <- data.frame (\', A + B \ '= 1: 3, check.names = YANLIŞ); select_ (dat, "A + B") ' – thelatemail

+0

O http://stackoverflow.com/questions/35839408/r-dplyr- (ile one_of'' select' bu [durumların türlü] içinde cevap olabilir 'gibi görünüyor drop-multiple-columns/35839679 # 35839679): 'seçin (veri, one_of (sütunlar))' – aosmith

cevap

2

Adları backtick'lerde kaydırma işi yapar.

columns <- c('`CH4+Sulfate-1`', '`CH4+Sulfate-2`', '`CH4+Sulfate-3`')