根据标签将一列分隔在不同的列中

问题描述 投票:0回答:1

我有一个数据集,其中一列有一个字符串作为值。 字符串有这样的方面: F:随便; F:随便;普:随便;普:随便; C:随便; C:随便;

我想将该列分成 3 列:一列用于 F,另一列用于 P,另一列用于 C,当有多个 F(或 P 或 C)时,我需要为每个列占据不同的行(剩下的列数相同)。

我该怎么做?

提前谢谢您!

示例:

名称 值 GO Ab1 1000 "F: f1; F: f2; P: p1" Bb1 2000“P:p1;F:f1” Cb1 3000“C:c1;F:f1”

我想要的输出:

名称 值 F P C Ab1 1000 f1 p1 - Ab1 1000 f2 p1 - Bb1 2000 f1 p1 - Cb1 3000 f1 - c1

我尝试过

str_match(a, "F:\\s*(.*?)\\s*;") 

但它只适用于第一场比赛,我需要所有比赛。

r dataframe substring
1个回答
0
投票

这是您需要的吗:

library(tidyverse)  
df %>%
  rowid_to_column() %>%
  extract(string,
          into = c("id","content"),
          regex = "(.)\\W+(.+)") %>%
  pivot_wider(names_from = id, values_from = content)
# A tibble: 6 × 5
  rowid someothervar F        P        C       
  <int> <chr>        <chr>    <chr>    <chr>   
1     1 A            whatever NA       NA      
2     2 B            whatever NA       NA      
3     3 C            NA       whatever NA      
4     4 D            NA       whatever NA      
5     5 E            NA       NA       whatever
6     6 F            NA       NA       whatever

数据:

df <- data.frame(
  someothervar = LETTERS[1:6],
  string = c("F: whatever", "F: whatever", "P:  whatever", "P: whatever", "C:whatever", "C: whatever")
)
© www.soinside.com 2019 - 2024. All rights reserved.