Ввод одного столбца информации во фрейм данных R. - PullRequest
4 голосов
/ 27 сентября 2010

В настоящее время я использую этот код для ввода данных из многочисленных файлов в 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 ]

3 голосов
/ 27 сентября 2010

Если вы просто хотите прочитать из ваших файлов в конкретный столбец , то 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
0 голосов
/ 27 сентября 2010

Если вы просто делаете это один раз, то ответ colClasses, вероятно, будет лучшим (однако, он все равно считывает все данные, обрабатывает только один столбец).Если вы делаете такие вещи часто, вы можете вместо этого использовать базу данных.Посмотрите на пакеты RSQLite, sqldf и SQLiteDF, а также RODBC для некоторых возможностей.

0 голосов
/ 27 сентября 2010

может быть, просто добавление имени столбца в строку чтения таблицы в порядке, например:

datalist = lapply(filelist, function(x)read.table(x, header=T, sep=";", comment.char="")["FOCUS APP"]) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...