R - return 到 cut 中的数字
R - return to numbers from cut
我有一个 table,间隔削减如下:
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)
有没有更好的方法来实现这个?我还需要做什么才能得到结果?
谢谢。
在您的示例中,边界比您希望检索的要多。这会给你所有的界限:
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"
如果您的数据始终采用这种格式,您可以使用 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"
另一种方式是:
a<-strsplit(as.character(pl$table[,'bin']), ' ')
lapply(a, function(x) unlist(strsplit(x, ",|]"))[2])
我有一个 table,间隔削减如下:
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)
有没有更好的方法来实现这个?我还需要做什么才能得到结果?
谢谢。
在您的示例中,边界比您希望检索的要多。这会给你所有的界限:
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"
如果您的数据始终采用这种格式,您可以使用 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"
另一种方式是:
a<-strsplit(as.character(pl$table[,'bin']), ' ')
lapply(a, function(x) unlist(strsplit(x, ",|]"))[2])