извлечь значения из нескольких списков - PullRequest
0 голосов
/ 28 января 2019

У меня есть несколько списков именованных номеров с выводом следующим образом:

list1

A         B       C      
5.0      1.29    3.54

list2

A         B       C      
6.0     2.29    4.54

Я хотел бы вычислить медиану всех значений, соответствующихс таким же именем.Например, медиана всех значений, соответствующих «А».Моя идея состоит в том, чтобы извлечь значение, соответствующее «А» из каждого списка и создать фрейм данных.Как мне это сделать?

Иначе, есть ли лучший способ вычислить медиану?

Спасибо

Ответы [ 2 ]

0 голосов
/ 28 января 2019

это не красиво, но работает.использует as.data.frame(), t() и summarize_all() из тидиверса.

library(tidyverse)

lst <- list(c(A = 5.0, B = 1.29, C = 3.54), c(A = 6.0, B = 2.29, C = 4.54))

lst %>% 
  as.data.frame(col.names = 1:length(lst)) %>% 
  t() %>% 
  data.frame() %>% 
  summarize_all(median)
0 голосов
/ 28 января 2019

Мое решение создает список списков, затем использует sapply для извлечения элемента "A" в вектор, а затем принимает медиану.

list1 <- list(5,1.29,3.54)
list2 <- list(6,2.29,4.54)
list3 <- list(7,3.29,4.54)

names(list1) <- c("A","B","C")
names(list2) <- c("A","B","C")
names(list3) <- c("A","B","C")


##
median_a <- median(sapply(list(list1, list2, list3), function(i)i[["A"]]))
median_b <- median(sapply(list(list1, list2, list3), function(i)i[["b"]]))

##Alternatively you can put everything in a dataframe, and then take the median using apply
df <- data_frame_of_values <- data.frame(
    a = sapply(list(list1, list2, list3), function(i)i[["A"]]),
    b = sapply(list(list1, list2, list3), function(i)i[["B"]]),
    c = sapply(list(list1, list2, list3), function(i)i[["C"]])
)

apply(df, MARGIN = 2,median) ##This retrieves the medians
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...