Een rij van een dataframe converteren naar vector

Ik wil een vector maken uit een rij van een dataframe. Maar ik wil geen rij- en kolomnamen. Ik heb verschillende dingen geprobeerd… maar had geen geluk.

Dit is mijn dataframe:

> df <- data.frame(a=c(1,2,4,2),b=c(2,6,2,1),c=c(2.6,8.2,7.5,3))
> df
  a b   c
1 1 2 2.6
2 2 6 8.2
3 4 2 7.5
4 2 1 3.0

Ik heb het geprobeerd:

> newV <- as.vector(df[1,])
> newV
  a b   c
1 1 2 2.6

Maar ik wil echt dat iets er zo uitziet:

> newV <- c( 1,2,2.6)
> newV
[1] 1.0 2.0 2.6

Antwoord 1, autoriteit 100%

Als u een enkele rij extraheert uit een gegevensframe, krijgt u een gegevensframe met één rij. Converteer het naar een numerieke vector:

as.numeric(df[1,])

Zoals @Roland suggereert, zal unlist(df[1,])het dataframe van één rij converteren naar een numerieke vector zonder de namen te laten vallen. Daarom is unname(unlist(df[1,]))een andere, iets explicietere manier om tot hetzelfde resultaat te komen.

Zoals @Josh hieronder opmerkt, als je een niet-volledig numeriek (alfabetisch, factor, gemengd …) dataframe hebt, heb je as.character(df[1,])nodig in plaats daarvan.


Antwoord 2, autoriteit 28%

Ik raad unlistaan, die de namen behoudt.

unlist(df[1,])
  a   b   c 
1.0 2.0 2.6 
is.vector(unlist(df[1,]))
[1] TRUE

Als u geen benoemde vector wilt:

unname(unlist(df[1,]))
[1] 1.0 2.0 2.6

Antwoord 3, Autoriteit 7%

Hier is een dplyroptie:

newV = df %>% slice(1) %>% unlist(use.names = FALSE)
# or slightly different:
newV = df %>% slice(1) %>% unlist() %>% unname()

Antwoord 4, Autoriteit 4%

Als u niet wilt wijzigen in numeriek, kunt u dit proberen.

> as.vector(t(df)[,1])
[1] 1.0 2.0 2.6

Antwoord 5, Autoriteit 2%

Merk op dat u voorzichtig moet zijn als uw rij een factor bevat. Hier is een voorbeeld:

df_1 = data.frame(V1 = factor(11:15),
                  V2 = 21:25)
df_1[1,] %>% as.numeric() # you expect 11 21 but it returns 
[1] 1 21

Hier is een ander voorbeeld (standaardgegevens.frame () converteert tekens naar factoren)

df_2 = data.frame(V1 = letters[1:5],
                  V2 = 1:5)
df_2[3,] %>% as.numeric() # you expect to obtain c 3 but it returns
[1] 3 3
df_2[3,] %>% as.character() # this won't work neither
[1] "3" "3"

Om dit gedrag te voorkomen, moet u voor de factor zorgen voordat u het extrahaalt:

df_1$V1 = df_1$V1 %>% as.character() %>% as.numeric()
df_2$V1 = df_2$V1 %>% as.character()
df_1[1,] %>% as.numeric()
[1] 11  21
df_2[3,] %>% as.character()
[1] "c" "3"

Antwoord 6

Kolommen met gegevenskaders zijn al vectoren, je hoeft ze gewoon uit te trekken. Merk op dat u de gewenste kolom plaatst na de komma, niet eerder:

> newV <- df[,1]
> newV
[1] 1 2 4 2

Als je eigenlijk een rij wilt, doe dan wat Ben zei en gebruik alsjeblieft woorden correct in de toekomst.

Other episodes