在列中拆分字符串并使用输出 (r) 创建新列

Split string in column and create new columns with the output (r)

如何将第一列拆分为 2 个部分(例如 01 和 run1)并创建另外 2 个列来存储该信息?

P = c('01_run1', '01_run2', '02_run1', '02_run2')
Score = c(1, 2, 3, 4)
df = data.frame(P, Score)

        P Score 
1 01_run1     1
2 01_run2     2
3 02_run1     3
4 02_run2     4

最终产品

            P Score Number  Run
    1 01_run1     1     01 run1
    2 01_run2     2     01 run2
    3 02_run1     3     02 run1
    4 02_run2     4     02 run2

我可以使用带有 split = '_' 的 strsplit() 来分隔 2 个组件,但是除了使用循环之外还有另一种创建 2 列的方法吗(许多人建议不要在 r 中这样做?)

我们可以在这里尝试使用 sub,对于一个基本 R 选项:

df$Number <- sub("_.*$", "", df$P)
df$Run    <- sub("^.*_", "", df$P)

Demo

第一次调用 sub 使用模式 _.*$ 并替换为空字符串(即删除匹配的内容)。这将匹配从下划线到字符串结尾的所有内容。同样,对 sub 的第二次调用使用模式 ^.*_,这将删除 之前 的所有内容,包括下划线。在这两种情况下,它都会给我们留下我们想要的数据。

这个怎么样:

df <- df %>% separate(P, c("Number", "Run"), "_", remove = FALSE) %>% select(P, Score, Number, Run)