在使用中解脱出来,读了大量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>)]
感谢您的帮助阅读,我只是跑你提供的代码,它的工作!我可以进一步问为什么不能使用子集()来分解读取的数据表的子集?谢谢! –
@ShuoLiu - 你可以,但最好使用列名,而不是数字。所以'subset(outcome4,!=“Not Available”)'会起作用。但正如你可以从我的答案中看到的那样,常规数据表方法(用'[')写起来更容易,所以为什么不这样做:) –
明白了!谢谢! –