Как использовать colClass в R для столбцов, соответствующих определенному имени в fread () - PullRequest
0 голосов
/ 26 марта 2019

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

require(data.table)
require(QuantPsyc)
library(lmSupport)
library(dbplyr)

#Import OID Label Data based on Open Image Data Set only
flickrcar <- fread("/Users/01_Open Image Data Set/01_Raw Data/flickrexport_cars_oid_201903.csv",sep=",", encoding = "Latin-1", header=TRUE)

После импорта данных набор имеет следующую структуру :

Classes ‘data.table’ and 'data.frame':  820600 obs. of  2180 variables:
 $ count_comments                          : int  0 0 0 0 0 2 2 0 0 1 ...
 $ count_faves                             : int  5 2 2 15 1 3 19 5 1 4 ...
 $ dateadded                               : int  1530174689 1530174688 1530174687 1530162494 1530159458 1530158648 1530158074 1529994404 1529992211 1529868922 ...
 $ datetaken                               : chr  "2018-05-10 15:50:59" "2018-05-10 15:50:53" "2018-05-10 15:50:03" "2006-11-27 00:00:00" ...
 $ dateupload                              : int  1530174672 1530174671 1530174669 1498275521 1436228321 1482723483 1496706006 1529994381 1529992197 1529868901 ...
 $ group_url                               : chr  "https://www.flickr.com/groups/capriceclassic/" "https://www.flickr.com/groups/capriceclassic/" "https://www.flickr.com/groups/capriceclassic/" "https://www.flickr.com/groups/capriceclassic/" ...
 $ id                                      :integer64 42341316794 42341318944 42341324184 35456820766 19292939750 31070311463 34738418140 42964602432 ... 
 $ license                                 : int  6 6 6 0 0 0 0 6 0 6 ...
 $ oid.800metres                           : logi  NA NA NA NA NA NA ...
 $ oid.Abbey                               : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Abdomen                             : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Academicconference                  : logi  NA NA NA NA NA NA ...
 $ oid.Academicdress                       : logi  NA NA NA NA NA NA ...
 $ oid.Accipitriformes                     : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Acousticguitar                      : logi  NA NA NA NA NA NA ...
 $ oid.Acoustic-electricguitar             : logi  NA NA NA NA NA NA ...
 $ oid.Acrylicpaint                        : logi  NA NA NA NA NA NA ...
 $ oid.Actionfigure                        : logi  NA NA NA NA NA NA ...
 $ oid.Adolescent                          : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Adult                               : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Adventure                           : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Advertising                         : num  NA NA NA NA NA ...
 $ oid.Aeolianlandform                     : logi  NA NA NA NA NA NA ...
 $ oid.Aerialphotography                   : logi  NA NA NA NA NA NA ...
 $ oid.Aerobatics                          : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Aerospaceengineering                : logi  NA NA NA NA NA NA ...
 $ oid.Africanelephant                     : logi  NA NA NA NA NA NA ...
 $ oid.Afterglow                           : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Agaric                              : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Agaricaceae                         : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Agaricus                            : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Agriculturalmachinery               : logi  NA NA NA NA NA NA ...
 $ oid.Agriculture                         : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Airforce                            : logi  NA NA NA NA NA NA ...
 $ oid.Airracing                           : logi  NA NA NA NA NA NA ...
 $ oid.Airshow                             : logi  NA NA NA NA NA NA ...
 $ oid.Airsports                           : logi  NA NA NA NA NA NA ...
 $ oid.Airtravel                           : logi  NA NA NA NA NA NA ...
 $ oid.Airbusa320family                    : logi  NA NA NA NA NA NA ...
 $ oid.Aircraft                            : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Aircraftcabin                       : logi  NA NA NA NA NA NA ...
 $ oid.Aircraftcarrier                     : logi  NA NA NA NA NA NA ...
 $ oid.Aircraftengine                      : logi  NA NA NA NA NA NA ...
 $ oid.Airline                             : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Airliner                            : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Airplane                            : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Airport                             : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Airportapron                        : logi  NA NA NA NA NA NA ...
 $ oid.Airportterminal                     : logi  NA NA NA NA NA NA ...
 $ oid.Aisle                               : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Albumcover                          : logi  NA NA NA NA NA NA ...
 $ oid.Alcohol                             : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Alcoholicbeverage                   : logi  NA NA NA NA NA NA ...
 $ oid.Ale                                 : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Algae                               : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Alley                               : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Alligator                           : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Alloywheel                          : logi  NA NA NA NA NA NA ...
 $ oid.All-terrainvehicle                  : logi  NA NA NA NA NA NA ...
 $ oid.Alps                                : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Altar                               : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Amateurboxing                       : logi  NA NA NA NA NA NA ...
 $ oid.Amateurwrestling                    : logi  NA NA NA NA NA NA ...
 $ oid.Ambulance                           : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Americanfootball                    : logi  NA NA NA NA NA NA ...
 $ oid.Amphibian                           : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Amphibiousassaultship               : logi  NA NA NA NA NA NA ...
 $ oid.Amphibioustransportdock             : logi  NA NA NA NA NA NA ...
 $ oid.Amphitheatre                        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Amusementpark                       : logi  NA NA NA NA NA NA ...
 $ oid.Amusementride                       : logi  NA NA NA NA NA NA ...
 $ oid.Ancientgreektemple                  : logi  NA NA NA NA NA NA ...
 $ oid.Ancienthistory                      : logi  NA NA NA NA NA NA ...
 $ oid.Ancientromanarchitecture            : logi  NA NA NA NA NA NA ...
 $ oid.Ancientrome                         : logi  NA NA NA NA NA NA ...
 $ oid.Animal                              : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Animalmigration                     : logi  NA NA NA NA NA NA ...
 $ oid.Animalshelter                       : logi  NA NA NA NA NA NA ...
 $ oid.Animalsports                        : logi  NA NA NA NA NA NA ...
 $ oid.Animaltraining                      : logi  NA NA NA NA NA NA ...
 $ oid.Anime                               : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Annualplant                         : logi  NA NA NA NA NA NA ...
 $ oid.Ant                                 : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Antelope                            : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Antique                             : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Antiquecar                          : logi  NA NA NA NA NA NA ...
 $ oid.Apartment                           : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Ape                                 : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Apple                               : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Aqua                                : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Aquarium                            : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Aquaticplant                        : logi  NA NA NA NA NA NA ...
 $ oid.Aqueduct                            : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Arabiancamel                        : logi  NA NA NA NA NA NA ...
 $ oid.Arcade                              : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Arch                                : num  NA NA NA NA NA NA NA NA NA NA ...
 $ oid.Archbridge                          : logi  NA NA NA NA NA NA ...
 $ oid.Archaeologicalsite                  : logi  NA NA NA NA NA NA ...
 $ oid.Archipelago                         : num  NA NA NA NA NA NA NA NA NA NA ...
  [list output truncated]
 - attr(*, ".internal.selfref")=<externalptr> 

Проблема в том, что fread каким-то образом неправильно интерпретирует некоторые из столбцов "oid.XXXX".Все они должны быть типа "num".Однако я не могу просто изменить соответствующие столбцы на «num» после импорта данных, так как это оставит меня с «FALSE, 0 или 1» вместо числовых значений.

Поэтому я пытаюсь назначить определенный colClass для всех столбцов «oid.XXX» в самой функции fread ().Это то, что я придумал до сих пор:

flickrcar <- fread("/Users/01_Open Image Data Set/01_Raw Data/flickrexport_cars_oid_201903.csv", colClasses=list(numerical=grep("oid.", names(flickrcar), value = TRUE)),sep=",", encoding = "Latin-1", header=TRUE)

К сожалению, это не работает.Заранее большое спасибо за помощь!

1 Ответ

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

Сначала вы можете прочитать только заголовок, чтобы найти, какие столбцы имеют oid в названии. Затем установите классы соответственно:

x = fread('
A B C oid.a oid.b D E
1 2 3 NA     NA     6 7',
  nrows = 0)

colNames = grep('^oid', names(x), value = TRUE)
colClasses = rep('numeric', length(colNames))
names(colClasses) = colNames 
x = fread('
A B C oid.a oid.b D E
1 2 3 NA    NA     6 7',
  colClasses = colClasses)
str(x)
# Classes ‘data.table’ and 'data.frame':    1 obs. of  7 variables:
# $ A    : int 1
# $ B    : int 2
# $ C    : int 3
# $ oid.a: num NA
# $ oid.b: num NA
# $ D    : int 6
# $ E    : int 7

Альтернативой, конечно, может быть изменение столбцов после их прочтения, но при больших данных правильная установка класса вначале, как показано, вероятно, будет предпочтительнее

...