在使用中解脱出来,读了大量CDV,为什么不能引用列数读取列

问题描述:

当用于fread读取一个csv,例如:在使用中解脱出来,读了大量CDV,为什么不能引用列数读取列

library(data.table) 
outcome4<-fread("outcome-of-care-measures.csv") 

那么我想子集观察,如果第11列('心脏病发作医院30天死亡(死亡率)')不是'Not Available'。所以我下面写道:

outcome5<-subset(outcome4, outcome4[,11]!="Not Available") 

但好像subset功能没有工作,结果5的观察一样的是outcome4,和11列的所有观察都成为11

为什么?如果我使用read.csv函数,一切工作正常。

在此先感谢!

看看outcome4[,11]的结果。

正如你所写,fread()返回一个数据表。反过来,outcome4[,11]返回11。并且11永远不会等于"Not Available",所以您将整个表格都取回来了。您希望为数据表的第11列使用outcome4[, 11, with = FALSE],或者在fread()中使用data.table = FALSE来返回数据帧而不是数据表。

但数据表的方式来做到这一点是:

outcome4[<column name 11> != "Not Available"] 

其中<column name 11>是第11列的不带引号的名称。

或者改变"Not Available"NA在与

outcome4 <- fread(file, na.strings = "Not Available") 
outcome4[!is.na(<column name 11>)] 
+0

感谢您的帮助阅读,我只是跑你提供的代码,它的工作!我可以进一步问为什么不能使用子集()来分解读取的数据表的子集?谢谢! –

+0

@ShuoLiu - 你可以,但最好使用列名,而不是数字。所以'subset(outcome4,!=“Not Available”)'会起作用。但正如你可以从我的答案中看到的那样,常规数据表方法(用'[')写起来更容易,所以为什么不这样做:) –

+0

明白了!谢谢! –