Я хотел бы получить подсписок из кадра данных.Я искал повсюду.
Это не полный список, как map()
пример с got_chars
, а список в датафрейме.
И последнее: не помню этогомой вопрос о подсписке в dataframe, а не о boxplot.stats()
.Может быть полезно получить список из dataframe в случаях без boxplot.stats()
.
Вот мое представление:
library(tidyverse)
library(stats)
library(DBI)
con <- dbConnect(RSQLite::SQLite(), ":memory:")
dbWriteTable(con, "mtcars", mtcars)
data_in<-dbGetQuery(con, "SELECT 'cyl'||cyl as cyl,disp FROM mtcars")
data_in
#> cyl disp
#> 1 cyl6.0 160.0
#> 2 cyl6.0 160.0
#> [...snip..snip ...]
#> 28 cyl4.0 95.1
#> 29 cyl8.0 351.0
#> 30 cyl6.0 145.0
#> 31 cyl8.0 301.0
#> 32 cyl4.0 121.0
boxplot.stats.fct <-function (data, ind, code ) {
r<- boxplot.stats( unlist(data[ind]), coef = 1.5, do.conf = TRUE)
# it works but I would like to do that at the return variable
r$quartile1<-r$stats[2]
r$quartile3<-r$stats[3]
# it doesn't works
r$stats_list=r$stats
r[code]<-as.character(data[code])
return(r)
}
data_transposed <-aggregate (disp ~ cyl, data =data_in, FUN=t)
data_transposed
#> cyl
#> 1 cyl4.0
#> 2 cyl6.0
#> 3 cyl8.0
#> disp
#> 1 108.0, 146.7, 140.8, 78.7, 75.7, 71.1, 120.1, 79.0, 120.3, 95.1, 121.0
#> 2 160.0, 160.0, 258.0, 225.0, 167.6, 167.6, 145.0
#> 3 360.0, 360.0, 275.8, 275.8, 275.8, 472.0, 460.0, 440.0, 318.0, 304.0, 350.0, 400.0, 351.0, 301.0
data.stats.out <- as.data.frame(do.call(rbind,
apply(data_transposed,
MARGIN=1,
FUN=boxplot.stats.fct,"disp","cyl"
)
)
)
data.stats.out
#> stats n conf out
#> 1 71.10, 78.85, 108.00, 120.65, 146.70 11 88.08698, 127.91302
#> 2 145.0, 160.0, 167.6, 196.3, 225.0 7 145.9222, 189.2778 258
#> 3 275.8, 301.0, 350.5, 400.0, 472.0 14 308.695, 392.305
#> quartile1 quartile3 stats_list cyl
#> 1 78.85 108 71.10, 78.85, 108.00, 120.65, 146.70 cyl4.0
#> 2 160 167.6 145.0, 160.0, 167.6, 196.3, 225.0 cyl6.0
#> 3 301 350.5 275.8, 301.0, 350.5, 400.0, 472.0 cyl8.0
Это работает, но я сократил данные на r$stats[2]
в функции.
(data.stats.out %>% mutate (toto1 = .$quartile1,
toto2 = .$quartile3
)%>% select (cyl,toto1,toto2))
#> cyl toto1 toto2
#> 1 cyl4.0 78.85 108
#> 2 cyl6.0 160 167.6
#> 3 cyl8.0 301 350.5
Не работает: списки объединены, строка 1 равна строке 2
(data.stats.out %>% mutate (toto1 = .$stats_list[2],
toto2 = .$stats_list[3]
)%>% select (cyl,toto1,toto2))
#> cyl toto1
#> 1 cyl4.0 145.0, 160.0, 167.6, 196.3, 225.0
#> 2 cyl6.0 145.0, 160.0, 167.6, 196.3, 225.0
#> 3 cyl8.0 145.0, 160.0, 167.6, 196.3, 225.0
#> toto2
#> 1 275.8, 301.0, 350.5, 400.0, 472.0
#> 2 275.8, 301.0, 350.5, 400.0, 472.0
#> 3 275.8, 301.0, 350.5, 400.0, 472.0
dbDisconnect(con)
Создано в 2019-02-08 с помощью представьте пакет (v0.2.1)
Я хотел бы выбрать n-й список вне функции.И не в функции.