Создать список, содержащий конкретные данные R - PullRequest
0 голосов
/ 02 октября 2018

Следующие два списка вложены в больший список.

Я хочу создать новый список (я предполагаю, что это лучший вывод, но приветствуются другие предложения!), Который содержит только данные, относящиеся кмалярия.

У меня нет кода для обмена, так как я не знаю, как это сделать!Заранее спасибо.

list(structure(c("Condition", "Malnutrition", "Anaemia", "Pneumonia", 
"Uncomplicated malaria", "Diarrhoea with Blood", "Other diarrhea", 
"Total", "2001", "118", "243", "1592", "4969", "134", "423", 
"7479", "2002", "9927", "18933", "98068", "302891", "21724", 
"48610", "500153", "2003", "7232", "18933", "68418", "227034", 
"13369", "35083", "370069", "2004", "6896", "98068", "74769", 
"215533", "12198", "46265", "453729", "Total", "334156", "136177", 
"242847", "750426", "47425", "130381", "1641412"), .Dim = c(8L, 
6L)), 
structure(c("Condition", "Uncomplicated malaria", "Diarrhoea with Blood", 
"Other diarrhea", "Pneumonia", "Hypertension", "Diabetes", "Cataracts", 
"Asthma", "Scabies", "Mental Disorder", "2001", "209182", "7306", 
"12800", "27832", "13573", "231", "614", "2857", "15596", "1326", 
"2002", "264785", "17662", "27739", "54454", "24759", "1009", 
"1092", "7470", "43741", "2298", "2003", "227034", "8225", "2003", 
"38233", "18790", "551", "526", "5819", "22077", "1627", "2004", 
"215533", "7605", "2004", "41128", "23329", "690", "834", "5583", 
"23784", "1954", "Total", "916534", "40798", "44546", "161647", 
"80451", "2481", "3066", "21729", "105198", "7205"), .Dim = c(11L, 
6L))

1 Ответ

0 голосов
/ 02 октября 2018

Редактировать на основе обратной связи с оператором:

Сначала рассмотрим ваш пример, нам нужно преобразовать каждый элемент list в data.frame с правильными colnames:

library(purrr)
library(dplyr)

col_names_list <- lapply(dat, function(x) x[1, ]) # we extract the first row (colnames)

dat <- lapply(dat, function(x) as.data.frame(x[-1, ])) # change to data.frame format

dat <- map2(dat, col_names_list, function(x,y) {colnames(x)[1] <- y[1] 
                                                x}) 
# change the colname in data.frame only for the first column (named "Condition")

С помощью map мы можем извлечь то, что нам нужно:

dat %>% 
  map(function(x) x[grepl("malaria", x[,1]),, drop = FALSE])

# [[1]]
# Condition 2001   2002   2003   2004  Total
# 4 Uncomplicated malaria 4969 302891 227034 215533 750426
# 
# [[2]]
# Condition   2001   2002   2003   2004  Total
# 1 Uncomplicated malaria 209182 264785 227034 215533 916534

Используемые данные:

dat <- list(structure(c("Condition", "Malnutrition", "Anaemia", "Pneumonia", 
                 "Uncomplicated malaria", "Diarrhoea with Blood", "Other diarrhea", 
                 "Total", "2001", "118", "243", "1592", "4969", "134", "423", 
                 "7479", "2002", "9927", "18933", "98068", "302891", "21724", 
                 "48610", "500153", "2003", "7232", "18933", "68418", "227034", 
                 "13369", "35083", "370069", "2004", "6896", "98068", "74769", 
                 "215533", "12198", "46265", "453729", "Total", "334156", "136177", 
                 "242847", "750426", "47425", "130381", "1641412"), .Dim = c(8L, 
                                                                             6L)), 
     structure(c("Condition", "Uncomplicated malaria", "Diarrhoea with Blood", 
                 "Other diarrhea", "Pneumonia", "Hypertension", "Diabetes", "Cataracts", 
                 "Asthma", "Scabies", "Mental Disorder", "2001", "209182", "7306", 
                 "12800", "27832", "13573", "231", "614", "2857", "15596", "1326", 
                 "2002", "264785", "17662", "27739", "54454", "24759", "1009", 
                 "1092", "7470", "43741", "2298", "2003", "227034", "8225", "2003", 
                 "38233", "18790", "551", "526", "5819", "22077", "1627", "2004", 
                 "215533", "7605", "2004", "41128", "23329", "690", "834", "5583", 
                 "23784", "1954", "Total", "916534", "40798", "44546", "161647", 
                 "80451", "2481", "3066", "21729", "105198", "7205"), .Dim = c(11L, 
                                                                               6L)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...