2016-07-28 39 views
1

嘗試將columnames作爲索引或變量傳遞給tidyr::separate時遇到錯誤。應該如何將列作爲變量或索引傳遞給tidyr :: separate

設置庫&數據:

library(tidyr) 
library(dplyr) 
x <- data.frame(col1 = 1:4, 
       col2 = c("a,b,c","d,e,f","g,h,i","j,k,l")) 
sep <- "," 
colnameVar <- "col2" 

這些工作(在dplyr):

x %>% select(col2) %>% names 
# [1] "col2" 
x %>% select(colnameVar %>% as.name %>% eval) %>% names 
# [1] "col2" 
x %>% select(2) %>% names 
# [1] "col2" 

至於這是否(帶獨立):

x %>% 
separate(col2, 
paste("col2",1:3,sep="."), 
sep = sep) %>% names 
# [1] "col1" "col2.1" "col2.2" "col2.3" 

但這種失敗:

x %>% 
separate(colnameVar %>% as.name %>% eval, 
paste("col2",1:3,sep="."), 
sep = sep) %>% names 

Error: Invalid column specification

至於做這個的:

x %>% 
separate(2, 
paste("col2",1:3,sep="."), 
sep = sep) %>% names 

Error: Invalid column specification

應該如何進行?

回答

1

使用的單獨,在這裏我們可以通過串下劃線版本:

# colnames as a predefined string 
x %>% 
    separate_(colnameVar, paste("col2", 1:3, sep = "."), sep = sep) %>% 
    names 
# [1] "col1" "col2.1" "col2.2" "col2.3" 

# colnames as index (well almost, we are getting colname as string by index) 
x %>% 
    separate_(colnames(x)[2], paste("col2", 1:3, sep = "."), sep = sep) %>% 
    names 
# [1] "col1" "col2.1" "col2.2" "col2.3"