如何从R中的strsplit()获取空的最后一个元素?

cei*_*cat 9 csv string r strsplit

我需要处理一些主要是csv的数据.问题是如果它出现在行的末尾(例如,下面示例中的3之后的那个),则R忽略逗号.

> strsplit("1,2,3,", ",")
[[1]]
[1] "1" "2" "3"
Run Code Online (Sandbox Code Playgroud)

[1] "1" "2" "3" NA相反,我希望将其读入.我怎样才能做到这一点?谢谢.

GSe*_*See 9

这里有几个想法

scan(text="1,2,3,", sep=",", quiet=TRUE)
#[1]  1  2  3 NA

unlist(read.csv(text="1,2,3,", header=FALSE), use.names=FALSE)
#[1]  1  2  3 NA
Run Code Online (Sandbox Code Playgroud)

这些都返回整数向量.您可以环绕as.character其中任何一个以获得您在问题中显示的确切输出:

as.character(scan(text="1,2,3,", sep=",", quiet=TRUE))
#[1] "1" "2" "3" NA 
Run Code Online (Sandbox Code Playgroud)

或者,你可以指定what="character"的scan,或者colClasses="character"在read.csv对输出结果略有不同

scan(text="1,2,3,", sep=",", quiet=TRUE, what="character")
#[1] "1" "2" "3" "" 

unlist(read.csv(text="1,2,3,", header=FALSE, colClasses="character"), use.names=FALSE)
#[1] "1" "2" "3" "" 
Run Code Online (Sandbox Code Playgroud)

你也可以指定na.strings=""随colClasses="character"

unlist(read.csv(text="1,2,3,", header=FALSE, colClasses="character", na.strings=""), 
       use.names=FALSE)
#[1] "1" "2" "3" NA 
Run Code Online (Sandbox Code Playgroud)


smc*_*mci 7

Hadley stringi(以及之前的stringr)库是基本字符串函数的一个巨大改进(完全矢量化,一致的函数接口):

require(stringr)
str_split("1,2,3,", ",")

[1] "1" "2" "3" "" 

as.integer(unlist(str_split("1,2,3,", ",")))
[1]  1  2  3 NA
Run Code Online (Sandbox Code Playgroud)

  • `stringr`很慢,你应该使用`stringi` :) (3认同)
  • @silvaran你是完全正确的,我写完之后才意识到`stringi`.(如何在R中保持最新最好的包装?) (3认同)