Выберите конкретные столбцы в списке листов в R - Looping - PullRequest
1 голос
/ 30 сентября 2019

У меня есть список с 20 data.frames, и я хотел бы отфильтровать определенные столбцы по имени (Tag, Trait1 и Trait2) из ​​этого списка, после того как я объединю их. Если столбец data.frame не имеет столбца, я хотел бы вставить столбец с NA. Так, например, у меня есть такая ситуация:

sheet.1

Tag Sex Trait1 Trait2 Trait3
1   M     23     Y      55
2   F     25     N      66
3   F     25     N      62 
4   F     26     Y      35

sheet.2

Tag  Sex Trait1 
5     M     25     
6     F     27     
7     M     25      
8     F     23   

Итак, я хотел бы это:

nw.sheet.1

Tag Sex Trait1 Trait2 
1   M     23     Y      
2   F     25     N      
3   F     25     N       
4   F     26     Y      

nw.sheet.2

Tag  Sex Trait1 Trait2
5     M     25    NA
6     F     27    NA 
7     M     25    NA  
8     F     23    NA

1 Ответ

2 голосов
/ 30 сентября 2019

Один из вариантов: получить наборы данных в list, создать vector имен столбцов, которые мы хотим select ('nm1'), использовать intersect и setdiff для выбора пересекающихсястолбцы и столбцы, которые необходимо создать как NA, если они отсутствуют в наборе данных, и возвращает новые list из data.frame с в list

nm1 <- c("Tag", "Sex", "Trai1", "Trait2")
outlst <- lapply(lst1, function(x)  {
              nm2 <- intersect(names(x), nm1)
              nm3 <- setdiff(nm1, nm2)
              x1 <- x[nm2]
              x1[nm3] <- NA
              x1})

ПРИМЕЧАНИЕ. Неясночто имел в виду sheetsЕсли он из книги Excel, его можно загрузить в list с readxl

library(readxl)
file <- "file.xlsx'
lst1 <- map(1:2, ~ read_excel(file, sheet = .x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...