如何在R中使用colClass来匹配fread()中的特定名称的列

时间:2019-03-25 22:52:55

标签: r fread grepl

此刻,我正在使用以下代码将数据集导入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” Colums解释为错误。它们都应为“ num”类型。但是,在导入数据后,我不能仅仅将相应的列更改为“ num”,因为这会使我留下“ FALSE,0或1”而不是数值。

因此,我试图为fread()函数本身内的所有“ oid.XXX”列分配一个特定的colClass。到目前为止,这是我想出的:

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 个答案:

答案 0 :(得分:1)

您可以先阅读标题,以查找名称中具有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

当然,另一种选择是在读取列之后重铸这些列,但是在大数据上首先如图所示正确设置类可能是更好的选择