我有一个数据集,其中一列有一个字符串作为值。 字符串有这样的方面: 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*;")
但它只适用于第一场比赛,我需要所有比赛。
这是您需要的吗:
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")
)