如何将第一列拆分为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)
对sub
的第一次调用使用模式_.*$
并替换为空字符串(即删除匹配的内容)。这将匹配从下划线到字符串结尾的所有内容。类似地,对sub的第二次调用使用模式^.*_
,它将删除包括下划线之前的所有内容。在这两种情况下,它都会给我们留下我们想要的数据。
这个怎么样:
df <- df %>% separate(P, c("Number", "Run"), "_", remove = FALSE) %>% select(P, Score, Number, Run)