rbind тип столбца из списка элементов - PullRequest
0 голосов
/ 07 марта 2019

У меня есть четыре файла Excel, которые я загрузил в R, используя list.files, и использовал lapply для их чтения. Мой код:

 my_files <- list.files(pattern = '*.xlsx')
 my_list <- lapply(my_files ,read_excel)

Файлы содержат много разных столбцов:

 lapply(my_list ,colnames)
 > lapply(my_list ,colnames)
 [[1]]
 [1] "JobCard Branch" "Customer Name" "Primary Contact No" "Alt No 1"          
 [5] "Alt No 2" "Reg No"            
 [[2]]
 [1] "CUSTOMER" "Primary Contact No"  "Alt No 1" "REG NO#"            
 [5] "VehModel" "Last Service Outlet"
 [[3]]
 [1] "Company Name" "JobCard Branch" "Service_Branch"          
 [4] "HUB" "Customer Code" "Address"                 
 [7] "Address Line2" "Primary Contact No" "Alt No 1"                
 [10] "Alt No 2" "Alt No 3" "Zip"                     
 [13] "Source" "City" "Vehicle Model"           
 [16] "Make" "Reg No" "Chasis No"               
 [[4]]
 [1] "Last Call Date" "Reg.No" "Model" "Customer Name"  "Contact Number" "Booked Outlet" 
 > 

Может ли кто-нибудь сообщить мне, могу ли я извлечь из всех этих столбцов только столбцы регистрационных номеров («Reg No», «REG NO #», «Reg No», «Reg.No»), используя rbind или любую другую функцию .

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Вы можете попробовать использовать grep в режиме нечувствительности к регистру:

lapply(my_list, function(x) {
    y <- colnames(x)
    y[grep("\\breg\\b", y, ignore.case=TRUE)]
})

При этом используется шаблон регулярного выражения \breg]b в режиме нечувствительности к регистру, чтобы найти имена столбцов, которые соответствуют вашему желанию.

0 голосов
/ 07 марта 2019

Мы могли бы создать вектор имен столбцов (cols), который мы хотим извлечь, и затем использовать lapply для циклического перебора списка информационных кадров и подмножества столбцов, которые соответствуют cols.

cols <- c("Reg No","REG NO#","Reg No","Reg.No")
data.frame(unlist(lapply(my_list, function(x) 
           x[names(x) %in% cols]), use.names = FALSE))

Воспроизводимый пример

df1 <- data.frame(a = 1:5, b = 2:6)
df2 <- data.frame(a1 = 1:4, new_s = 2:5)
df3 <- data.frame(abc = 1:4)
list_df <- list(df1, df2, df3)


cols <- c("a", "a1", "abc")
data.frame(new = unlist(lapply(list_df, function(x) 
                 x[names(x) %in% cols]),use.names = FALSE))

#     new
# 1     1
# 2     2
# 3     3
# 4     4
# 5     5
# 6     1
# 7     2
# 8     3
# 9     4
#10     1
#11     2
#12     3
#13     4
...