我目前正在使用此代码将来自众多文件的数据输入到R:
library(foreign)
setwd("/Users/ericbrotto/Desktop/A_Intel/")
filelist <-list.files()
#assuming tab separated values with a header
datalist = lapply(filelist, function(x)read.table(x, header=T, sep=";", comment.char=""))
#assuming the same header/columns for all files
datafr = do.call("rbind", datalist)
标题如下所示:
TIME ;POWER SOURCE ;qty MONITORS ;NUM PROCESSORS ;freq of CPU Mhz ;SCREEN SIZE ;CPU LOAD ;BATTERY LEVEL ; KEYBOARD MVT ; MOUSE MVT ;BATTERY MWH ;HARD DISK SPACE ;NUMBER PROCESSES ;RAM ;RUNNING APPS ;FOCUS APP ;BYTES IN ;BYTES OUT ;ACTIVE NETWORKS ; IP ADDRESS ; NAMES OF FILES ;
并且数据的示例如下所示:
2010-09-11-19:28:34.680 ; BA ; 1 ; 2 ; 2000 ; 1440 : 900 ; 0.224121 ; 92 ; NO ; NO ; NULL ; 92.581558 ; 57 ; 196.1484375 ; +NULL ; loginwindow-#35 ; 5259 ; 4506 ; en1 : ; 192.168.1.3 ; NULL ;
而不是将所有列输入到我想要抓住的数据框中,比如FOCUS APP。
答案 0 :(得分:3)
如果您只想阅读文件中的特定列,那么colClasses
就是您的选择。例如,假设您的数据如下所示:
a,b
1,2
3,4
然后
## Use colClasses to select columns
## "NULL" means skip the column
## "numeric" means that the column is numeric
## Other options are Date, factor - see ?read.table for more
## Use NA to let R decide
data = read.table("/tmp/tmp.csv", sep=",",
colClasses=c("NULL", "numeric"),
header=TRUE)
只给出了第二列。
> data
b
1 2
2 4
答案 1 :(得分:0)
可能只是将列名添加到您的读取表行就可以了,如下所示:
datalist = lapply(filelist, function(x)read.table(x, header=T, sep=";", comment.char="")["FOCUS APP"])
答案 2 :(得分:0)
如果您只是这样做一次,那么colClasses答案可能是最好的(但是仍然读取所有数据,只处理一列)。如果您经常这样做,那么您可能希望使用数据库。查看RSQLite,sqldf和SQLiteDF包以及RODBC的一些可能性。