将一列信息输入R数据帧。

时间:2010-09-27 12:12:55

标签: r

我目前正在使用此代码将来自众多文件的数据输入到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。

3 个答案:

答案 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的一些可能性。