在这两种情况下,我都有一个类似的文件,但是有更多信息:
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)
但是没有用。
答案 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
,然后按如下所示使用strsplit
和df = 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]))