R - 从切割返回数字

时间:2016-10-21 15:16:09

标签: r string list cut

我有一张表格,其间隔为:

    bin targets casos   prop phyp      logit
(-2,-1]     193  6144 0.0314    0 -3.4286244
  (-1,3]     128   431 0.2970    1 -0.8617025
 (3,11]     137   245 0.5592    1  0.2378497

我想获得原始剪辑。我尝试过:

a<-strsplit(as.character(pl$table[,'bin']), ' ')

然后我尝试用:

分割每一行
lapply(a, function(x) strsplit(x, ",")[1] )

但我没有得到预期的结果,即:

(-1,3,11)

有没有更好的方法来实现这一目标?我还需要做些什么才能得到结果?

感谢。

3 个答案:

答案 0 :(得分:3)

如果您的数据始终采用此格式,则可以使用df <- data.frame(bin = c('(-2,-1]','(1,3]','(3,11]'), targets = c(193, 128, 137), casos = c(6144, 431, 245), prop = c(0.0314, 0.297, 0.5592), phyp = c(0,1,1), logit = c(-3.4286244,-0.8617025, 0.2378497), stringsAsFactors = F) a <- strsplit(df$bin, ',') sapply(a, function(x) gsub("]", "", x))[2,] sapply(a, function(x) gsub("\\(", "", x))[1,]

[1] "-1" "3"  "11"
[1] "-2" "1"  "3" 

哪个给你

{{1}}

答案 1 :(得分:1)

在您的示例中,您希望检索的边界多于您所说的边界。这将为您提供所有界限:

d <- read.table(text='    bin targets casos   prop phyp      logit
"(-2,-1]"     193  6144 0.0314    0 -3.4286244
  "(1,3]"     128   431 0.2970    1 -0.8617025
 "(3,11]"     137   245 0.5592    1  0.2378497', header=T)

strings <- as.character(levels(d$bin))
strings <- substr(strings, 2, nchar(strings)-1)
unique(unlist(strsplit(strings, ",")))
# [1] "-2" "-1" "1"  "3"  "11"

如果你只想要上限,这将有效:

strings <- as.character(levels(d$bin))
strings <- sapply(strsplit(strings, ","), function(l){ l[2] })
strings <- substr(strings, 1, nchar(strings)-1)
unique(strings)
# [1] "-1" "3"  "11"

答案 2 :(得分:1)

另一种方式是:

a<-strsplit(as.character(pl$table[,'bin']), ' ')
lapply(a, function(x) unlist(strsplit(x, ",|]"))[2])
相关问题