-1

「コンマ」、つまり「、」で区切られたテキストデータがあります。データのサンプルを以下に示します (最初の行は列名を示します)。

userID,appName,startTime,endTime,endResult
chhieut,gms.mos.test,2012-07-01 02:47:16,2012-07-01 02:47:46,1
chhieut,gms.mos.test,2012-07-01 03:11:46,2012-07-01 03:12:25,2
chhieut,gms.mos.test,2012-07-01 03:13:36,2012-07-01 03:14:03,2
chhieut,gms.mos.test,2012-07-01 03:18:26,2012-07-01 03:18:58,2
chhieut,gms.mos.test,2012-07-01 04:10:36,2012-07-01 04:10:54,2
chhieut,gms.mos.test,2012-07-01 04:38:26,2012-07-01 04:38:48,2
chhieut,gms.mos.test,2012-07-01 04:48:56,2012-07-01 04:49:04,3
chhieut,gms.mos.test,2012-07-01 05:49:46,2012-07-01 05:50:14,2
chhieut,gms.mos.test,2012-07-01 06:19:07,2012-07-01 06:19:25,2
chhieut,gms.mos.test,2012-07-01 07:09:17,2012-07-01 07:09:47,2

次の構文を使用しています。

appsession <- read.table("C:/.../AppSession.txt", sep = ",", 
  col.names = c("userID","appName","startTime","endTime","endResult"), 
  fill = FALSE, strip.white = TRUE)

このエラーが発生しています:

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
  line 1 did not have 5 elements
4

3 に答える 3

3

skip = 2空行があり、を使用せずに「col.names」を使用する予定がある場合は、使用する必要があると思いますheader=TRUE。現時点では、あなたのコードは単純なテキスト読み取りで動作します (とにかく動作します)」

> txt <- "userID,appName,startTime,endTime,endResult
+ chhieut,gms.mos.test,2012-07-01 02:47:16,2012-07-01 02:47:46,1
+ chhieut,gms.mos.test,2012-07-01 03:11:46,2012-07-01 03:12:25,2
+ chhieut,gms.mos.test,2012-07-01 03:13:36,2012-07-01 03:14:03,2
+ chhieut,gms.mos.test,2012-07-01 03:18:26,2012-07-01 03:18:58,2
+ chhieut,gms.mos.test,2012-07-01 04:10:36,2012-07-01 04:10:54,2
+ chhieut,gms.mos.test,2012-07-01 04:38:26,2012-07-01 04:38:48,2
+ chhieut,gms.mos.test,2012-07-01 04:48:56,2012-07-01 04:49:04,3
+ chhieut,gms.mos.test,2012-07-01 05:49:46,2012-07-01 05:50:14,2
+ chhieut,gms.mos.test,2012-07-01 06:19:07,2012-07-01 06:19:25,2
+ chhieut,gms.mos.test,2012-07-01 07:09:17,2012-07-01 07:09:47,2
+ "
> appsession <- read.table(text=txt, sep = ",", 
+   col.names = c("userID","appName","startTime","endTime","endResult"), 
+   fill = FALSE, strip.white = TRUE)
> 
> appsession
    userID      appName           startTime             endTime endResult
1   userID      appName           startTime             endTime endResult
2  chhieut gms.mos.test 2012-07-01 02:47:16 2012-07-01 02:47:46         1
3  chhieut gms.mos.test 2012-07-01 03:11:46 2012-07-01 03:12:25         2
4  chhieut gms.mos.test 2012-07-01 03:13:36 2012-07-01 03:14:03         2
5  chhieut gms.mos.test 2012-07-01 03:18:26 2012-07-01 03:18:58         2
6  chhieut gms.mos.test 2012-07-01 04:10:36 2012-07-01 04:10:54         2
7  chhieut gms.mos.test 2012-07-01 04:38:26 2012-07-01 04:38:48         2
8  chhieut gms.mos.test 2012-07-01 04:48:56 2012-07-01 04:49:04         3
9  chhieut gms.mos.test 2012-07-01 05:49:46 2012-07-01 05:50:14         2
10 chhieut gms.mos.test 2012-07-01 06:19:07 2012-07-01 06:19:25         2
11 chhieut gms.mos.test 2012-07-01 07:09:17 2012-07-01 07:09:47         2

ヘッダーを使用するか、ヘッダー行をスキップする (さらに空白行をスキップする) 必要があります。空白行がいくつあるかを確認する 1 つの方法は、 の出力を確認することですcountfields( ..., sep=",")read.*およびscan関数が「見ている」ものを確認する別の方法は、次のコードを実行することです (省略記号を適切に置き換えて)。

appLines <- readLines("C:/.../AppSession.txt")
appLines[1:5] # will display the first 5 lines from that file 
              # with no attempt to deal with any separators.
于 2012-09-27T07:40:34.210 に答える
2

適切に編集されたバージョンのデータを使用して (つまり、すべての空白行を削除します!)、これを 経由で簡単に R にロードできますread.csv()。ここで、データをファイルに書き込むことを避けるために、データを含むテキスト接続を使用していることに注意してください。conのファイル名に置き換えるだけread.csv()です。

con <- textConnection("userID,appName,startTime,endTime,endResult
chhieut,gms.mos.test,2012-07-01 02:47:16,2012-07-01 02:47:46,1
chhieut,gms.mos.test,2012-07-01 03:11:46,2012-07-01 03:12:25,2
chhieut,gms.mos.test,2012-07-01 03:13:36,2012-07-01 03:14:03,2
chhieut,gms.mos.test,2012-07-01 03:18:26,2012-07-01 03:18:58,2
chhieut,gms.mos.test,2012-07-01 04:10:36,2012-07-01 04:10:54,2
chhieut,gms.mos.test,2012-07-01 04:38:26,2012-07-01 04:38:48,2
chhieut,gms.mos.test,2012-07-01 04:48:56,2012-07-01 04:49:04,3
chhieut,gms.mos.test,2012-07-01 05:49:46,2012-07-01 05:50:14,2
chhieut,gms.mos.test,2012-07-01 06:19:07,2012-07-01 06:19:25,2
chhieut,gms.mos.test,2012-07-01 07:09:17,2012-07-01 07:09:47,2
")

dat <- read.csv(con,
                colClasses = c(rep("character", 2), rep("POSIXct", 2),
                               "numeric"))
close(con) ## closing connection, not needed with a file

また、colclasses引数を指定することにより、データを読み取る前にデータが何であるかをRに伝え、後でフォーマットを保存することに注意してください。特にDateTimeデータを使用します。ここでこれを行うことができるのは、DateTime 変数が正しい形式で格納されているためです。

R> head(dat)
   userID      appName           startTime             endTime endResult
1 chhieut gms.mos.test 2012-07-01 02:47:16 2012-07-01 02:47:46         1
2 chhieut gms.mos.test 2012-07-01 03:11:46 2012-07-01 03:12:25         2
3 chhieut gms.mos.test 2012-07-01 03:13:36 2012-07-01 03:14:03         2
4 chhieut gms.mos.test 2012-07-01 03:18:26 2012-07-01 03:18:58         2
5 chhieut gms.mos.test 2012-07-01 04:10:36 2012-07-01 04:10:54         2
6 chhieut gms.mos.test 2012-07-01 04:38:26 2012-07-01 04:38:48         2
R> str(dat)
'data.frame':   10 obs. of  5 variables:
 $ userID   : chr  "chhieut" "chhieut" "chhieut" "chhieut" ...
 $ appName  : chr  "gms.mos.test" "gms.mos.test" "gms.mos.test" "gms.mos.test" ...
 $ startTime: POSIXct, format: "2012-07-01 02:47:16" "2012-07-01 03:11:46" ...
 $ endTime  : POSIXct, format: "2012-07-01 02:47:46" "2012-07-01 03:12:25" ...
 $ endResult: num  1 2 2 2 2 2 3 2 2 2
于 2012-09-27T07:47:33.280 に答える