如何基于列中的值扩展数据框

时间:2018-10-04 18:54:33

标签: r dplyr tidyr

我在数据框的某列中的某些行中具有多个值。我想有一个数据框,其中每一行都有一个新行,其中包含单个列的多个值。现在我已经确定了如何将价值观分开。有什么想法吗?

这里是一个例子:

## input
tibble(
code = c(
85310,
47730,                       
61900,                           
93110,                          
"56210,\r\n70229",           
"93110,\r\n93130,\r\n93290"),
vary2 = LETTERS[1:6])

## desired output
tibble(
code = c(85310, 47730, 61900, 93110, 56210, 70229, 
         93110, 93130, 93290),
vary2 = c('A', 'B', 'C', 'D', 'E', 'E', 'F', 'F', 'F')
)

## one unsuccesful approach

tibble(
  code = c(
    85310,
    47730,                       
    61900,                           
    93110,                          
    "56210,\r\n70229",           
    "93110,\r\n93130,\r\n93290"),
  vary2 = LETTERS[1:6]) %>% 
  separate(col = 'code', into = LETTERS[1:3], sep = ',\\r\\n') 

1 个答案:

答案 0 :(得分:3)

我们可以使用separate_rows

library(tidyverse)
df1 %>% 
  separate_rows(code, sep="[,\r\n]+") 
# A tibble: 9 x 2
#  code  vary2
#  <chr> <chr>
#1 85310 A    
#2 47730 B    
#3 61900 C    
#4 93110 D    
#5 56210 E    
#6 70229 E    
#7 93110 F    
#8 93130 F    
#9 93290 F    

正如@KerryJackson在评论中提到的,如果我们不指定sep,则算法会自动选择所有定界符(如果我们想将其限制为特定的定界符,最好使用{ {1}})

sep