【问题标题】:R - return to numbers from cutR - 从剪切返回数字
【发布时间】:2016-10-21 15:16:09
【问题描述】:

我有一张桌子,上面有这样的间隔:

    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)

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

谢谢。

【问题讨论】:

  • unlist(lapply(strsplit(df$bin, ","), function(x) max(as.numeric(gsub("\\(|]", "", x)))))

标签: r string list cut


【解决方案1】:

如果您的数据始终采用这种格式,您可以使用gsub()

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" 

【讨论】:

    【解决方案2】:

    在您的示例中,您希望检索的范围比您说的要多。这会给你所有的界限:

    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"
    

    【讨论】:

    • 谢谢。我意识到了这一点,并在示例中对其进行了更改。
    【解决方案3】:

    另一种方法是:

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

    【讨论】:

      猜你喜欢
      • 2016-04-26
      • 1970-01-01
      • 2017-02-28
      • 2013-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多