fastlanes
fastlanes

Reputation: 333

Split all values in column and store them in a single numeric vector

I have a dataframe in R and I want to create a single numeric vector by splitting all of the character values in a specific column and then appending them to the vector or list. The values in the column are all comma-separated numbers and there are rows with missing values or NA.

Current data

id col
1  2,6,10
2  NA
3  5, 10 
4  1

Final vector

# v <- c(2, 6, 10, 5, 10, 1)
# v
[1] 2 6 10 5 10 1

I'm able to do this by iterating through all the values in the column but I know this isn't the most efficient way since R is made to work easily with vectors. Is there a better way to do this?

v <- c()
for(val in df$col){
  if(!is.na(val)){
    ints <- as.numeric(unlist(strsplit(val, ",")))
    v <- c(v, ints)
  }
}

Upvotes: 0

Views: 269

Answers (2)

Karthik S
Karthik S

Reputation: 11584

Does this work:

library(dplyr)
library(tidyr)
df %>% separate_rows(col) %>% na.omit() %>% pull(col) %>% as.numeric() -> v
v
[1]  2  6 10  5 10  1

Data used:

df
# A tibble: 4 x 2
     id col   
  <dbl> <chr> 
1     1 2,6,10
2     2 NA    
3     3 5, 10 
4     4 1    

Upvotes: 2

Ronak Shah
Ronak Shah

Reputation: 388982

You already have the answer in your code since all the functions you are using are vectorised.

v <- as.numeric(na.omit(unlist(strsplit(df$col, ','))))
v
#[1]  2  6 10  5 10  1

Upvotes: 2

Related Questions