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