【问题标题】:How to copy just the information in the second place of a Column in R with several information如何仅复制 R 中列的第二个位置的信息以及多个信息
【发布时间】:2019-09-16 14:46:15
【问题描述】:

我有一个这样的文件,包含这两种情况,但包含更多信息:

Animal  Column.2
1       0000000000000082 Y001003014
2       0000000000000195 TU00000186 REID:n05510451964756
3       0000000000000104 F001002923 F001002923

我的第 2 列有多个信息,但我只想要第二个信息,如下所示:

 Animal  Column.2
    1    Y001003014
    2    TU00000186
    3    F001002923

我试过这段代码:

df$Column.2= gsub("^.{0,17}" & '.{11}$', '', df$Column.2)

但没用。

【问题讨论】:

    标签: r dataframe gsub


    【解决方案1】:

    ^[^ ]+? 取所有元素直到第一个空格,([^ ]+?)\\b 取第二个元素直到单词边界 \\b.* 取其余元素。使用\\1 粘贴从([^ ]+?) 获得的内容。

    (df$Column.2 <- sub("^[^ ]+? ([^ ]+?)\\b.*", "\\1" ,df$Column.2))
    #[1] "Y001003014" "TU00000186" "F001002923"
    

    如果格式是固定的,你可以使用:

    sub("^.{17}(.{10}).*", "\\1" ,df$Column.2)
    #[1] "Y001003014" "TU00000186" "F001002923"
    

    ^.{17} 获取前 17 个字符,(.{10}) 获取流动的 10 个字符并将它们存储在 \\1 中,.* 获取其余字符。

    【讨论】:

      【解决方案2】:

      如果不想使用正则表达式,由于元素是用空格分隔的,可以使用空格作为分隔符来分割字符串

      df = data.frame(Animal = c(1:3),
                      Column.2=c("0000000000000082 Y001003014",
                                 "0000000000000195 TU00000186 REID:n05510451964756",
                                 "0000000000000104 F001002923 F001002923"
                                 )
                      )
      

      然后使用strsplitlapply如下(注意你必须unlist结果)

      unlist(lapply(df$Column.2, function(x) unlist(strsplit(x, " ", fixed=FALSE))[2]))
      

      得到这个结果

      [1] "Y001003014" "TU00000186" "F001002923"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-16
        • 1970-01-01
        • 2016-02-03
        • 2021-06-10
        • 1970-01-01
        • 2021-11-21
        • 1970-01-01
        • 2019-07-22
        相关资源
        最近更新 更多