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

时间:2018-09-06 12:48:34

标签: r strsplit

如何将第一列分为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

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

2 个答案:

答案 0 :(得分:1)

对于一个基本的R选项,我们可以在此处尝试使用sub

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

enter image description here

Demo

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

答案 1 :(得分:0)

如何?

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