ido klein
ido klein

Reputation: 135

Concat a list column in R

I'm trying to concatenate characters within a list column in R. When I try this approach, the result is not 'abc' but a vector converted to character. What is the right approach?

library(tidyverse)
tibble(b=list(letters[1:3])) %>% 
  mutate(b = paste(b))
#> # A tibble: 1 x 1
#>   b                       
#>   <chr>                   
#> 1 "c(\"a\", \"b\", \"c\")"

Created on 2020-10-14 by the reprex package (v0.3.0)

Upvotes: 1

Views: 1176

Answers (3)

akrun
akrun

Reputation: 887118

We can use tidyverse

library(dplyr)
library(stringr)
library(purrr)
tibble(b=list(letters[1:3])) %>%
     mutate(b = map_chr(b, str_c, collapse=""))
# A tibble: 1 x 1
#  b    
#  <chr>
#1 abc  

Upvotes: 0

ThomasIsCoding
ThomasIsCoding

Reputation: 101335

Maybe you need something like below

library(tidyverse)
tibble(b=list(letters[1:3])) %>% 
  mutate(b = sapply(b,paste,collapse = ""))

giving

# A tibble: 1 x 1
  b
  <chr>
1 abc

Upvotes: 2

Duck
Duck

Reputation: 39595

Try this. Keep in mind that the element in your tibble is a list. So you can use any of these approaches:

library(tidyverse)
tibble(b=list(letters[1:3])) %>% 
  mutate(b = lapply(b,function(x)paste0(x,collapse = '')))

Or this:

#Code 2
tibble(b=list(letters[1:3])) %>% 
  mutate(b = sapply(b,function(x)paste0(x,collapse = '')))

Output:

# A tibble: 1 x 1
  b    
  <chr>
1 abc  

In the first case, you will get the result in a list whereas in the second one you will get it as a value.

Upvotes: 2

Related Questions