使用一个字符串处理大型数据帧,该字符串是元素列表(如chr).我想分离字符串,这样每个元素都有自己的键值列.我try 了"tidyr::separate"和"tidyverse::unnest\u widder()",但没有一个返回我想要的输出.

这是一个虚拟数据:

  df1 <- tibble(
    id = c('000914', '000916'),
    code = c('NN', 'SS'),
    values2 = c("{DS=15}{FPLUC=0}{N=CELL}{R=NINT1}{S=true}{SPLUC=1}" , "{DS=0}{FPLUC=0}{N=CELL}{R=NINT1}{S=true}{SPLUC=1}"         
  ) )

# A tibble: 2 x 3
  id     code  values2                                           
  <chr>  <chr> <chr>                                             
1 000914 NN    {DS=15}{FPLUC=0}{N=CELL}{R=NINT1}{S=true}{SPLUC=1}
2 000916 SS    {DS=0}{FPLUC=0}{N=CELL}{R=NINT1}{S=true}{SPLUC=1} 

我try 了分离,这是没有错,但它不完全是我想要的,它需要几个pivot\u更长和pivot\u更广泛的reshape .有更好更快的 Select 吗?

  df1 %>% 
    separate(values2, into = paste("Col", 1:14)) 

# A tibble: 2 x 16
  id     code  `Col 1` `Col 2` `Col 3` `Col 4` `Col 5` `Col 6` `Col 7` `Col 8` `Col 9`
  <chr>  <chr> <chr>   <chr>   <chr>   <chr>   <chr>   <chr>   <chr>   <chr>   <chr>  
1 000914 NN    ""      DS      15      FPLUC   0       N       CELL    R       NINT1  
2 000916 SS    ""      DS      0       FPLUC   0       N       CELL    R       NINT1  
# ... with 5 more variables: Col 10 <chr>, Col 11 <chr>, Col 12 <chr>, Col 13 <chr>,
#   Col 14 <chr>

这是我想要的输出:

  id     code   DS    FPLUC   N          R      S     SPLUC 

1 000914 NN    15     0      CELL       NINT1   true       1         
2 000916 SS    0      0      CELL       NINT1   true       1       

推荐答案

tidyr溶液:

library(tidyr)

df1 %>%
  separate_rows(values2, sep = '(?<=\\})(?=\\{)') %>%
  extract(values2, c('name', 'value'), '\\{(.+?)=(.+?)\\}') %>%
  pivot_wider()

# # A tibble: 2 × 8
#   id     code  DS    FPLUC N     R     S     SPLUC
#   <chr>  <chr> <chr> <chr> <chr> <chr> <chr> <chr>
# 1 000914 NN    15    0     CELL  NINT1 true  1
# 2 000916 SS    0     0     CELL  NINT1 true  1
  • separate_rows()将折叠的列(values2)分隔为多行.分离器(?<=\\})(?=\\{)位于}{之间的位置.
  • extract()使用正则表达式组将字符列分隔为多个列.正则表达式\\{(.+?)=(.+?)\\}搜索模式{Col=Value}并分别提取ColValue作为新列.

R相关问答推荐

如何替换某个字符的所有出现,但如果该字符是字符串中的第一个,则不替换?

在R中,将一个函数作为输入传递给另一个函数时进行参数判断

基于R中的GPS点用方向箭头替换点

在通过最大似然估计将ODE模型与数据匹配时,为什么要匹配实际参数的转换值?

无法运行通过R中的Auto.arima获得的ARIMA模型

删除facet_wrap标签之间的水平线

从嵌套列表中智能提取线性模型系数

如果列中存在相同的字符串,则对行值进行总和

如何使用rmarkdown和kableExtra删除包含折叠行的表的第一列的名称

带有叠加饼图系列的Highmap

Rplotly中的Sankey Diagram:意外连接&

如何在R中描绘#符号?

在使用bslb和bootstrap5时,有没有办法更改特定dt行的 colored颜色 ?

比较理论阿尔法和经验阿尔法

将选定的索引范围与阈值进行比较

如何使用前缀作为匹配来连接数据帧?

如何在R中使用hmm TMB提前一步预测观察到的状态?

随机将数据帧中特定列上的某些行设置为NA

为什么将负值向量提升到分数次方会得到NaN

在同一单元格中创建包含整数和百分比的交叉表