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

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

如何将第一列拆分为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中这样做吗?)

r strsplit
2个回答
1
投票

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

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

enter image description here

Demo

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


0
投票

这个怎么样:

df <- df %>% separate(P, c("Number", "Run"), "_", remove = FALSE) %>% select(P, Score, Number, Run)
© www.soinside.com 2019 - 2024. All rights reserved.