2017-01-12 2 views
0

Мне нужно оценить data.frame в списке с пороговым значением, намереваться получить новую группу data.frame, которую нужно было экспортировать как csv файлов. Однако после того, как я классифицирую каждый data.frame с заданным порогом, результат становится вложенным списком. Возможно, мне нужно манипулировать приведенным вложенным списком как список data.frame, затем перебрать список data.frame, чтобы экспортировать их как csv файлов. Я использовал reshape2, чтобы расплавить полученный вложенный список, но не знаю, как их группировать по потребностям и экспортировать их желаемым образом. Может ли кто-нибудь указать мне более простой способ манипулировать вложенным списком, чтобы сделать список data.frame? Как я могу это сделать? Есть ли эффективный способ сделать это? Большое спасибо :)Любой способ упростить data.frame во вложенном списке для удобства манипуляции?

Это воспроизводимая входной data.frame список:

myList <- list(
    hotan = data.frame(begin=seq(1, by=6, len=25), end=seq(4, by=6, len=25), pos.score=sample(30, 25)), 
    aksu = data.frame(begin=seq(3, by=9, len=30), end=seq(6, by=9, len=30), pos.score=sample(45, 30)), 
    korla = data.frame(begin=seq(6, by=8, len=45), end=seq(11, by=8, len=45), pos.score=sample(52, 45)) 
) 

мне нужно оценивать каждый data.frame с порогом, что приведет к вложенному списку, как это:

rslt <- lapply(myList, function(x) { 
    res <- split(x, ifelse(x$pos.score >=18, "good","bad")) 
}) 

Я пытался использовать melt удалить вложенную структуру списка:

library(reshape2) 
melt(rslt) 

Perhap s, сначала выйдя из вложенного списка, отбросьте rslt в список data.frame, затем используя lapply, чтобы экспортировать каждый как csv файлов. Любая идея, пожалуйста?

Edit:

Я знаю, что общий способ иметь дело с вложенным списком с помощью unlist, возможно, data.table или dplyr обеспечивает лучшую функцию для лечения такого рода проблемы. Я хочу учиться с новым решением. Благодаря

Я пытаюсь добиться этого списка data.frame:

hotan.good 
hotan.bad 
aksu.good 
aksu.bad 
korla.good 
korla.bad 

Как я могу достичь желаемого списка data.frame, которые должны быть экспортированы в качестве csv файла? Как я могу манипулировать rslt?

+0

'unlist (rslt, recursive = FALSE)' –

+0

@Apom Я знаю это, я ищу что-то интересное. – Dan

ответ

1

Если я по-прежнему @MarkusN» решение (спасибо за помощь):

library(dplyr) 
DF <- bind_rows(myList, .id="sample") %>% 
    mutate(threshold = ifelse(pos.score >=18, "good", "bad")) %>% 
    split(list(.$threshold,.$sample)) 
mapply(write.csv, DF, paste0(getwd(), names(DF), ".csv")) 

Таким образом, экспорт data.frame вложенного списка может быть гораздо проще и эффективнее.

1

Написать hotan.good.csv, hotan.bad.csv, aksu.good.csv ... к существующей папке ./out/:

library(magrittr) 
l <- unlist(rslt, recursive = FALSE) 
l %>% 
    names() %>% 
    lapply(FUN = function(f) write.csv(l[[f]], paste0("out/", f, ".csv"), row.names = FALSE)) %>% 
    invisible() 
2

Почему вы хотите использовать список dataframes? Вы можете легко поместить все данные в одном dataframe: (. Или даже разделить его в список dataframes)

library(dplyr) 
df = bind_rows(myList, .id="name") 
# new Variable threshold 
df %>% mutate(threshold = ifelse(pos.score >=18, "good", "bad")) 

теперь вы можете фильтровать и выбирать данные в этом dataframe

+0

@Dan Вы можете оценить подмножества одного кадра данных в кусках с помощью 'group_by' из dplyr или' by = 'из data.table.Если у вас нет плана параллельной обработки, который, как вы знаете, превзойдет их, я бы сказал, что придерживаюсь одного объекта. (Ответ на исчезающий комментарий ...) – Frank

Смежные вопросы