如何仅将信息复制到R中列的第二个位置,并包含多个信息

时间:2019-09-16 14:46:15

标签: r dataframe gsub

在这两种情况下,我都有一个类似的文件,但是有更多信息:

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)

但是没有用。

2 个答案:

答案 0 :(得分:2)

^[^ ]+?占用所有内容,直到第一个空格,([^ ]+?)\\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中,而.*接受其余的字符。

答案 1 :(得分:1)

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

apt-get

,然后按如下所示使用strsplitdf = data.frame(Animal = c(1:3), Column.2=c("0000000000000082 Y001003014", "0000000000000195 TU00000186 REID:n05510451964756", "0000000000000104 F001002923 F001002923" ) ) (请注意,您必须lapply的结果)

unlist

获得此结果

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