2016-10-21 1 views
1

У меня есть таблица с разрезами интервалов, как:R - вернуться к номерам из разреза

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) 

Есть лучший способ добиться этого? Что еще мне нужно сделать, чтобы получить результат?

Спасибо.

+1

'unlist (lapply (strsplit (ДФ $ бен ""), функция (х) тах (as.numeric (gsub ("\\ (|]", "", x))))) ' – ytk

ответ

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" 
+0

спасибо. Я понял это и изменил его в примере. – GabyLP

+0

Добро пожаловать, @GabyLP. – gung

3

Если данные последовательно в этом формате, вы можете использовать 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" 
1

Другой способ:

a<-strsplit(as.character(pl$table[,'bin']), ' ') 
lapply(a, function(x) unlist(strsplit(x, ",|]"))[2]) 
Смежные вопросы