2017-10-11 4 views
0

Betrachten wir die folgenden DatenRückgabewert von Teilmenge der Zeilen

df <- data.frame(a=c("a","a","b"), b=c(3,4,5), c=c(4,5,6)) 
df$a <- as.factor(df$a) 

Der Befehl unten gibt die Werte von „b“, wenn a = „a“.

df[df$a=="a","b"] 
[1] 3 4 

Wie kann ich den n-ten Wert dieser Spalte zurückgeben? Ich habe Folgendes versucht, um den ersten Wert zurückzugeben, aber derselbe Wert wird zurückgegeben.

df[df$a=="a","b",1] 
[1] 3 4 

Die Idee ist, dieses Konzept schließlich zu mehreren Datenrahmen in einer Funktion zu transponieren.

Antwort

2
df[df$a == "a", "b"] 

#[1] 3 4 

Dies ist ein Vektor.

is.vector(df[df$a == "a", "b"]) 
#[1] TRUE 

nun das n-te Element des Vektors bekommen Sie Index kann es die allgemeine Indexingtechnik

df[df$a == "a", "b"][1] 
#[1] 3 

Oder

df[df$a == "a", "b"][2] 
#[1] 4 

mit dem Sie den besonderen Wert, die Sie brauchen.

1

den zweiten Wert zurück

df[which(df$a=="a"),"b"][2] 
[1] 4 
1

Hier geht es um subsetting data.frames in r im Grunde eine Frage. Im Grunde, was Sie tun, ist:

df[rows, columns] 

Zeilen und Spalten logisch sein können, und integer mit der Zeile/Spalte-Index, der Namen. Wenn Sie die Zeilen und/oder Spalten nicht angeben, werden alle zurückgegeben.

df[, columns] #returns all rows and a subset of columns 
df[rows, ] #returns all columns and a subset of rows 
df[, ] # returns all rows and columns 

df[df$a=="a","b"] gibt alle Zeilen, wo Spalte „a“ auf den Buchstaben „a“ ist gleich (df$a=="a" kehrt 1] TRUE TRUE FALSE) und dann nur Spalte „b“ auswählt, die [1] 3 4 den Vektor zurückgibt.

Sie können dann diesen Vektor Teilmenge weiter [n] durch Zugabe:

df[df$a=="a", "b"][1] 
[1] 3 
df[df$a=="a", "b"][2] 
[1] 4 
1

dplyr Option:

library(dplyr) 

df %>% 
    filter(a == "a") %>% # filter where column a = "a" 
    slice(2) %>%   # get 2nd row 
    pull(b)     # get value as a vector instead of tibble 

# [1] 4 

Oder

df %>% 
    filter(a == "a") %>% # filter where column a = "a" 
    pull(b) %>%    # get column as a vector instead of tibble 
    nth(2)     # get 2nd value 

# [1] 4 
+0

'Collect()' funktioniert nicht für mich. Vielleicht 'df%>% filter (a ==" a ")%>%. $ B%>% nth (1)'? – zx8754

+0

Geändert, um 'pull()' zu verwenden, was jetzt funktionieren sollte –

0

Verwendung dplyr.

nth(df[df$a == "a", "b"],1) 

hier ist ein erster Wert in dem Vektor.

Verwandte Themen