Mam ramkę danych R z 6 kolumnami i chcę utworzyć nową ramkę danych, która ma tylko trzy kolumny.
Zakładając mój ramkę danych jest df
i chcę, aby wyodrębnić kolumn A
, B
orazE
jest to tylko dowodzić mogę dowiedzieć się:
data.frame(df$A,df$B,df$E)
Czy istnieje bardziej kompaktowy sposób na zrobienie tego?
df1 %>% select(A, B, E) %>% rowMeans(.)
. Zobacz dokumentację%>%
fajki, wpisując?magrittr::`%>%`
Możesz dokonać podzbioru za pomocą wektora nazw kolumn. Zdecydowanie wolę to podejście od tych, które traktują nazwy kolumn tak, jakby były nazwami obiektów (np.
subset()
), Szczególnie podczas programowania w funkcjach, pakietach lub aplikacjach.źródło
object of type 'closure' is not subsettable
.df
.df
jest również funkcją pakietu statystyk.-"A"
jest to błąd składniowy. I?Extract
mówi: „ , może być także ujemne liczby całkowite, wskazując elementy / plasterków zostawić z wyboru.”i
j
...
> df[,c("A")]
[1] 1
. Korzystaniesubset
nie ma tej wady.Oto rola
subset()
funkcji:źródło
c("A", "B")
to wektor, a nie lista.Istnieją dwie oczywiste opcje: Joshua Ulrich
df[,c("A","B","E")]
lubjak w
źródło
Tylko z jakiegoś powodu
pracował dla mnie. Wszystkie powyższe składnie dały „wybrane niezdefiniowane kolumny”.
źródło
Gdzie df1 jest twoją oryginalną ramką danych:
źródło
dplyr
. Wykorzystujebase::subset
i jest identyczny z odpowiedzią Stephane Laurenta, tyle że używa się numerów kolumn zamiast nazw kolumn.Możesz także użyć
sqldf
pakietu, który wykonuje selekcje na ramkach danych R jako:Daje to jako wyjście ramkę danych
df1
z kolumnami: A, B, E.źródło
Możesz użyć
with
:źródło
Możesz także przypisać inną nazwę do nowo utworzonych danych
źródło
[
i podzbiorów nie można zastępować:[
zwraca wektor, jeśli wybrana jest tylko jedna kolumna.źródło
drop=FALSE
. Przykład:df[,c("a"),drop=F]