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

问题描述 投票:0回答:1

目前,我使用以下代码将数据集导入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”而不是数值。

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

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)

不幸的是,这不起作用。非常感谢您的帮助!

r fread grepl
1个回答
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

当然,另一种方法是在读取后重新制作列,但是在大数据设置上,首先正确显示类可能更好

© www.soinside.com 2019 - 2024. All rights reserved.