在空格处拆分字符串向量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在空格处拆分字符串向量相关的知识,希望对你有一定的参考价值。

我有以下向量:

tmp3 <- c("1500 2", "1500 1", "1510 2", "1510 1", "1520 2", "1520 1", "1530 2", 
"1530 1", "1540 2", "1540 1")

我想在这个向量的每个原子中保留第二个数字,所以它会读取:

c(2,1,2,1,2,1,2,1,2,1)
答案

可能有更好的方法,但这里有两种方法与strsplit()

as.numeric(data.frame(strsplit(tmp3, " "))[2,])
as.numeric(lapply(strsplit(tmp3," "), function(x) x[2]))

如果您可以使用字符,则可能不需要as.numeric()...

另一答案

人们可以在read.table上使用textConnection

X <- read.table(textConnection(tmp3))

然后

> str(X)
'data.frame':   10 obs. of  2 variables:
 $ V1: int  1500 1500 1510 1510 1520 1520 1530 1530 1540 1540
 $ V2: int  2 1 2 1 2 1 2 1 2 1

所以X$V2是你需要的。

另一答案

它取决于您的实际数据与您给出的示例数据的匹配程度。我只是想在空间之后获得所有东西,你可以使用gsub

gsub(".+\s+", "", tmp3)
[1] "2" "1" "2" "1" "2" "1" "2" "1" "2" "1"

如果你试图实现比“占用空间之后的所有内容”更复杂的规则,那么你需要一个更复杂的常规表达式。

另一答案

我认为这是最优雅的方式

>     res <- sapply(strsplit(tmp3, " "), "[[", 2)

如果你需要它是一个整数

>     storage.mode(res) <- "integer"
另一答案
substr(x = tmp3, start = 6, stop = 6)

只要你的字符串总是相同的长度,这应该可以解决问题。

(当然,你不必指定参数名称 - substr(tmp3, 6, 6)也可以正常工作)

另一答案

这应该这样做:

library(plyr)
ldply(strsplit(tmp3, split = " "))[[2]]

如果您需要数字向量,请使用

as.numeric(ldply(strsplit(tmp3, split = " "))[[2]])
另一答案

另一种选择是scan()。要获得第二个值,我们可以使用逻辑子集。

scan(text = tmp3)[c(FALSE, TRUE)]
#  [1] 2 1 2 1 2 1 2 1 2 1
另一答案

通过data.table将1列拆分为2列的更简单方法

require(data.table)  
data_ex = data.table( a = paste( sample(1:3, size=10, replace=TRUE),"-separate", sep="" ))  
data_ex[, number:=  unlist( strsplit(x=a, split="-") )[[1]], by=a]  
data_ex[, word:= unlist( strsplit(x=a, split="-") )[[2]], by=a ]

以上是关于在空格处拆分字符串向量的主要内容,如果未能解决你的问题,请参考以下文章

使用空格将字符串拆分为向量 c++ 错误

用于在所有空格处拆分的正则表达式 Python [重复]

为啥将拆分为 wav 文件的旋律转换为拆分的 mp3 会在片段边界处产生不好的声音?

在特定字符处拆分字符串但忽略某些情况 C# LINQ

java里一段字符串按照空格拆分,然后再按逗号拆分怎么写

通过空格将字符串解析为向量