1

I want to convert two vectors into a wide format dataframe. The fist vector represent the column names and the second vector the values. Here is my reproduceable example:

vector1<-c("Reply","Reshare","Like","Share","Search")
vector2<-c(2,1,0,4,3)

Now I want to convert these two vector into a wide format dataframe:

# A tibble: 1 x 5
   Reply Reshare  Like Share Search
   <dbl>   <dbl> <dbl> <dbl>  <dbl>
1     2       1     0     4      3

I have found some examples for the long format, but none simple solution for the wide format. Can anyone help me?

Konrad Rudolph
  • 530,221
  • 131
  • 937
  • 1,214
TobKel
  • 1,293
  • 8
  • 20

5 Answers5

2

You can make a named list (e.g. using setNames), followed by as.data.frame:

df <- as.data.frame(setNames(as.list(vector2), vector1))

Note that it needs to be a list: when converting a named vector into a data.frame, R puts values into separate rows instead of columns.

Konrad Rudolph
  • 530,221
  • 131
  • 937
  • 1,214
2
vector1<-c("Reply","Reshare","Like","Share","Search")
vector2<-c(2,1,0,4,3)

df <- data.frame(vector1, vector2)
df |> tidyr::pivot_wider(names_from = vector1, values_from = vector2)
#> # A tibble: 1 × 5
#>   Reply Reshare  Like Share Search
#>   <dbl>   <dbl> <dbl> <dbl>  <dbl>
#> 1     2       1     0     4      3

Created on 2022-02-08 by the reprex package (v2.0.1)

Grzegorz Sapijaszko
  • 1,913
  • 1
  • 5
  • 12
2

Yet another solution, based on dplyr::bind_rows:

library(dplyr)

vector1<-c("Reply","Reshare","Like","Share","Search")
vector2<-c(2,1,0,4,3)

names(vector2) <- vector1
bind_rows(vector2)

#> # A tibble: 1 × 5
#>   Reply Reshare  Like Share Search
#>   <dbl>   <dbl> <dbl> <dbl>  <dbl>
#> 1     2       1     0     4      3
PaulS
  • 21,159
  • 2
  • 9
  • 26
0

We can use map_dfc and set_names

library(purrr)

set_names(map_dfc(vector2, ~.x), vector1)

# A tibble: 1 × 5
  Reply Reshare  Like Share Search
  <dbl>   <dbl> <dbl> <dbl>  <dbl>
1     2       1     0     4      3
GuedesBF
  • 8,409
  • 5
  • 19
  • 37
0

Another possible solution:

library(dplyr)

data.frame(rbind(vector1, vector2)) %>%
  `colnames<-`(.[1, ]) %>%
  .[-1, ] %>% 
  `rownames<-`(NULL)

  Reply Reshare Like Share Search
1     2       1    0     4      3
AndrewGB
  • 16,126
  • 5
  • 18
  • 49