Convert a row of a data frame to vector

前端 未结 6 596
予麋鹿
予麋鹿 2020-12-04 09:05

I want to create a vector out of a row of a data frame. But I don\'t want to have to row and column names. I tried several things... but had no luck.

This is my data

相关标签:
6条回答
  • 2020-12-04 09:13

    Here is a dplyr based option:

    newV = df %>% slice(1) %>% unlist(use.names = FALSE)
    
    # or slightly different:
    newV = df %>% slice(1) %>% unlist() %>% unname()
    
    0 讨论(0)
  • 2020-12-04 09:16

    Note that you have to be careful if your row contains a factor. Here is an example:

    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
    

    Here is another example (by default data.frame() converts characters to factors)

    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"
    

    To prevent this behavior, you need to take care of the factor, before extracting it:

    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"
    
    0 讨论(0)
  • 2020-12-04 09:20

    If you don't want to change to numeric you can try this.

    > as.vector(t(df)[,1])
    [1] 1.0 2.0 2.6
    
    0 讨论(0)
  • 2020-12-04 09:24

    Columns of data frames are already vectors, you just have to pull them out. Note that you place the column you want after the comma, not before it:

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

    If you actually want a row, then do what Ben said and please use words correctly in the future.

    0 讨论(0)
  • 2020-12-04 09:27

    I recommend unlist, which keeps the names.

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

    If you don't want a named vector:

    unname(unlist(df[1,]))
    [1] 1.0 2.0 2.6
    
    0 讨论(0)
  • 2020-12-04 09:37

    When you extract a single row from a data frame you get a one-row data frame. Convert it to a numeric vector:

    as.numeric(df[1,])
    

    As @Roland suggests, unlist(df[1,]) will convert the one-row data frame to a numeric vector without dropping the names. Therefore unname(unlist(df[1,])) is another, slightly more explicit way to get to the same result.

    As @Josh comments below, if you have a not-completely-numeric (alphabetic, factor, mixed ...) data frame, you need as.character(df[1,]) instead.

    0 讨论(0)
提交回复
热议问题