2014-11-26 23 views
35

dplyr::select bir data.frame ile sonuçlanır, sonuç bir sütun ise bir vektör döndürmesini sağlamanın bir yolu var mı? aşağıdadplyr :: bir sütun seçin ve vektör olarak çıktı olarak

#dummy data 
df <- data.frame(x = 1:10, y = LETTERS[1:10], stringsAsFactors = FALSE) 

#dplyr filter and select results in data.frame 
res <- df %>% filter(x > 5) %>% select(y) 
class(res) 
#[1] "data.frame" 

#desired result is a character vector 
res <- res$y 
class(res) 
#[1] "character" 

şey:

Şu anda, bu örneğe bakın, data.frame gelen vektör dönüştürmek için fazladan bir adım (res <- res$y) yapmak zorunda

böyle
res <- df %>% filter(x > 5) %>% select(y) %>% as.character 
res 
# This gives strange output 
[1] "c(\"F\", \"G\", \"H\", \"I\", \"J\")" 

# I need: 
# [1] "F" "G" "H" "I" "J" 
+1

@Henrik Evet, haklısınız. Bu gönderiyi, bir şekilde kopyalayamadığını gördüm, dolayısıyla bu gönderi. Şimdi çalışıyor! % df>% filtre (x> 5)%>% select (y)%>%. [["y"]] '. – zx8754

+3

Tamam! Genel olarak, sorunuzda bu tür ilgili bir gönderiyi belirtmek, neyi denediğinizi göstermek ve neyin yanlış gittiğini açıklamak iyi olur. Bu, bizi açık cevapları yinelemekten ve sizi zaten okuduğunuz ve denediğiniz yayınlara yönlendirmekten kurtarır. Şerefe. – Henrik

+1

Bu bir kopya değil. Diğer soru ise, bu sorunun cevabının ('%>%. $ Y') çalışmadığı veritabanı arka uçlu tabloya özeldir. – nacnudus

cevap

70

iyi yolu bunu yapmak için deneyebilirsiniz:

library(dplyr) 
df <- data_frame(x = 1:10, y = LETTERS[1:10]) 

df %>% 
    filter(x > 5) %>% 
    .$y 

dplyr 0.7.0, artık çekme kullanabilirsiniz yılında ():

df %>% filter(x > 5) %>% pull(y) 
+5

Bu bağlamda nokta operatörü ile ilgili belgelere işaret edebilir misiniz? – Andy

+1

@Andy magrittr belgesine bakın – hadley

+10

dplyr 0.7.0'da, şimdi 'pull()': 'df%>% filter (x> 5)%>% çekme (y)' – ianmcook

5

şey ?

> res <- df %>% filter(x>5) %>% select(y) %>% sapply(as.character) %>% as.vector 
> res 
[1] "F" "G" "H" "I" "J" 
> class(res) 
[1] "character" 
2

Ayrıca (IMO)

res <- df %>% 
      filter(x>5) %>% 
      select(y) %>% 
      as.matrix() %>% 
      c() 
#[1] "F" "G" "H" "I" "J" 

class(res) 
#[1] "character" 
İlgili konular