【问题标题】:Split string in column and create new columns with the output (r)在列中拆分字符串并使用输出 (r) 创建新列
【发布时间】:2018-09-06 12:48:34
【问题描述】:

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

【问题讨论】:

  • 几种方式,一种是:do.call(rbind, strsplit(P, "_"))

标签: r strsplit


【解决方案1】:

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

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

Demo

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

【讨论】:

  • 谢谢,效果很好。您介意解释一下不同参数的含义吗?
  • 为什么要添加结果图片而不是代码格式的 r 输出?
  • @AndreElrico 哦……漂亮的照片!我无法自拔! :~P
  • @TYL 称为正则表达式。尽可能多地了解它。
【解决方案2】:

这个怎么样:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2021-07-08
    • 2020-11-24
    • 2021-01-08
    相关资源
    最近更新 更多