如何将第一列分为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中使用循环)之外,还有另一种方法来创建这两个列吗?
答案 0 :(得分:1)
对于一个基本的R选项,我们可以在此处尝试使用sub
:
df$Number <- sub("_.*$", "", df$P)
df$Run <- sub("^.*_", "", df$P)
第一次调用sub
使用模式_.*$
并替换为空字符串(即删除匹配的内容)。从下划线到字符串结尾的所有内容都将与之匹配。同样,对sub的第二次调用使用模式^.*_
,该模式将删除之前并包括下划线的所有内容。在这两种情况下,它都会为我们提供所需的数据。
答案 1 :(得分:0)
如何?
df <- df %>% separate(P, c("Number", "Run"), "_", remove = FALSE) %>% select(P, Score, Number, Run)