使用fread()读取后无法对数据帧进行子集
我试图将一个名为cars的表子集,如下所示。我不希望子表中的Country列,因此我使用[,-1]删除了第一列,但它将我的新变量cars.use指定给了-1。这里发生了什么事使用fread()读取后无法对数据帧进行子集,r,data.table,subset,R,Data.table,Subset,我试图将一个名为cars的表子集,如下所示。我不希望子表中的Country列,因此我使用[,-1]删除了第一列,但它将我的新变量cars.use指定给了-1。这里发生了什么事 > library(data.table) > cars <- fread('cars.csv', header = TRUE) > typeof(cars) [1] "list" > head(cars) Country Car MPG Weig
> library(data.table)
> cars <- fread('cars.csv', header = TRUE)
> typeof(cars)
[1] "list"
> head(cars)
Country Car MPG Weight Drive_Ratio Horsepower Displacement Cylinders
1: U.S. Buick Estate Wagon 16.9 4.360 2.73 155 350 8
2: U.S. Ford Country Squire Wagon 15.5 4.054 2.26 142 351 8
3: U.S. Chevy Malibu Wagon 19.2 3.605 2.56 125 267 8
4: U.S. Chrysler LeBaron Wagon 18.5 3.940 2.45 150 360 8
5: U.S. Chevette 30.0 2.155 3.70 68 98 4
6: Japan Toyota Corona 27.5 2.560 3.05 95 134 4
> cars.use <- cars[,-1]
> cars.use
[1] -1
通过使用fread,我们得到了一个data.table。要创建子集,可以使用data.table,with=FALSE
cars[,-1, with=FALSE]
如?data.table所述
默认情况下,使用=TRUE,在x的框架内计算j;柱
名称可以用作变量。当with=FALSE时,j是一个字符
列名称向量或列位置的数字向量
选择,则返回的值始终为data.table。with=FALSE为
通常在data.table中用于动态选择列
数据
一个选项是将所有列的国家/地区设置为空。这可以通过以下方式完成:
# Create dataframe
df <- read.delim(text='
Country Car MPG Weight Drive_Ratio Horsepower Displacement Cylinders
U.S. BuickEstateWagon 16.9 4.360 2.73 155 350 8
U.S. FordCountrySquireWagon 15.5 4.054 2.26 142 351 8
U.S. ChevyMalibuWagon 19.2 3.605 2.56 125 267 8
U.S. ChryslerLeBaronWagon 18.5 3.940 2.45 150 360 8
U.S. Chevette 30.0 2.155 3.70 68 98 4
Japan ToyotaCorona 27.5 2.560 3.05 95 134 4', sep=' ')
#> df
# Country Car MPG Weight Drive_Ratio Horsepower
#1 U.S. BuickEstateWagon 16.9 4.360 2.73 155
#2 U.S. FordCountrySquireWagon 15.5 4.054 2.26 142
#3 U.S. ChevyMalibuWagon 19.2 3.605 2.56 125
#4 U.S. ChryslerLeBaronWagon 18.5 3.940 2.45 150
#5 U.S. Chevette 30.0 2.155 3.70 68
#6 Japan ToyotaCorona 27.5 2.560 3.05 95
# Displacement Cylinders
#1 350 8
#2 351 8
#3 267 8
#4 360 8
#5 98 4
#6 134 4
# Remove the 'Country' columns from the dataframe
df$Country <- NULL
#> df
# Car MPG Weight Drive_Ratio Horsepower Displacement
#1 BuickEstateWagon 16.9 4.360 2.73 155 350
#2 FordCountrySquireWagon 15.5 4.054 2.26 142 351
#3 ChevyMalibuWagon 19.2 3.605 2.56 125 267
#4 ChryslerLeBaronWagon 18.5 3.940 2.45 150 360
#5 Chevette 30.0 2.155 3.70 68 98
#6 ToyotaCorona 27.5 2.560 3.05 95 134
# Cylinders
#1 8
#2 8
#3 8
#4 8
#5 4
#6 4
你可以在打电话给fread时解决这个问题 如果将fread调用更改为按名称或数字删除第一列,则读取时将跳过该列
fread("cars.csv", drop = "Country", header = TRUE)
子集设置出现问题的原因是fread默认返回一个数据表。如果需要数据框,请将data.table参数更改为FALSE
有关更多详细信息,请参阅helpfread。由于OP处理的是data.table,如果我们想将第2列和第3列更改为NULL setDTdf[,2:3:=NULL],则在学习data.table后,使用data.table会更快更好。由于您已经在使用fread,我猜您应该知道这比使用read.table快得多。因此,要删除data.table语言中的列,可以使用以下命令:cars[,Country:=NULL]。另请参见下面的@akrun comment。如果您想在大多数情况下使用classcars而不是typeofcars。
fread("cars.csv", drop = "Country", header = TRUE)
cars <- fread("cars.csv", header = TRUE, data.table = FALSE)
fread("cars.csv", drop = "Country", header = TRUE, data.table = FALSE)