-1

更新: dput( ldf[[1]] ) の結果

問題ありません。これは次のとおりです。 3D9.1C2DDAE977"、"A 04/18/2013 06:42:38 3D9.1C2DA0E0B5"、"A 04/18/2013 06:42:38 3D9.1C2DA0E0B5"、"A 04/18/2013 07:07: 49 3D9.1C2DD9D3CF"、"A 04/18/2013 07:07:49 3D9.1C2DD9D3CF")

  • 問題は、これらの 4 つの変数が完全でない一部の行にある可能性があります。*---------------------------------------------------------------- ----------------------------

このフォーラムからこのパズルの多くのピースを入手しましたが、まだ立ち往生しています。テキスト ファイルからデータが読み込まれた 30 個のデータフレームのリストをループしようとしています。ループの最後にエラー メッセージと空の宛先データフレームが表示され続けます。問題がどこにあるのか誰にもわかりますか?

サンプルデータは次のとおりです。

[73] "E 04/21/2013 14:05:01 3D9.1C2DF6F22D" "E 04/21/2013 14:05:01 3D9.1C2DF6F22D"
[75] "E 04/21/2013 14:47:54 3D9.1C2DF6F22D" "E 04/21/2013 14:47:54 3D9.1C2DF6F22D"

[[26]]
[1] "E 04/22/2013 17:07:02 3D9.1C2DDAC745" "E 04/22/2013 17:07:02 3D9.1C2DDAC745"
[3] "E 04/22/2013 17:07:02 3D9.1C2DDAC745"

[[27]]
[1] "F 04/17/2013 15:14:39 3D9.1C2D1DB26E" "F 04/17/2013 15:14:43 3D9.1C2D1DB26E"
[3] "F 04/17/2013 15:14:43 3D9.1C2D1DB26E" "F 04/17/2013 15:14:43 3D9.1C2D1DB26E"

ここに私のループコードがあります:

new <- data.frame()

for (i in 1:length(ldf)) {
 a[i] <- as.data.frame(ldf[i])
 a[i] <- as.data.frame(a[i][-1,])
 names(a[i]) <- "id"
 c[i] <- strsplit(as.character(a[i]$id)," ")
 reader[i] = sapply(c[i],function(x)x[1])
 date[i] = sapply(c[i],function(x)x[2])
 time[i] = sapply(c[i],function(x)x[3])
 code[i] = sapply(c[i],function(x)x[4])
 out[i] <- as.data.frame(cbind(reader[i],date[i],time[i],code[i]))

new <- rbind(new, out[i])
}

これは私が受け取るエラーメッセージです:

Error in [<-.data.frame(`*tmp*`, i, 
value = list(c..A.04.17.2013.12.24.07.3D9.1C2D1DB26E....A.04.17.2013.12.24.07.3D9.1C2D1DB26E... = c(1L,  
: replacement element 1 has 337 rows, need 394

ありがとうございました!

4

2 に答える 2

1

私が正しく理解しているなら、あなたはこれが欲しい:

ldf <- list(c("E 04/21/2013 14:05:01 3D9.1C2DF6F22D","E 04/21/2013 14:05:01 3D9.1C2DF6F22D","E 04/21/2013 14:47:54 3D9.1C2DF6F22D","E 04/21/2013 14:47:54 3D9.1C2DF6F22D"),
c("E 04/22/2013 17:07:02 3D9.1C2DDAC745","E 04/22/2013 17:07:02 3D9.1C2DDAC745","E 04/22/2013 17:07:02 3D9.1C2DDAC745"),
c("F 04/17/2013 15:14:39 3D9.1C2D1DB26E","F 04/17/2013 15:14:43 3D9.1C2D1DB26E","F 04/17/2013 15:14:43 3D9.1C2D1DB26E","F 04/17/2013 15:14:43 3D9.1C2D1DB26E"))

do.call(rbind,lapply(ldf,function(x) data.frame(do.call(rbind,strsplit(x," ")))))
   X1         X2       X3             X4
1   E 04/21/2013 14:05:01 3D9.1C2DF6F22D
2   E 04/21/2013 14:05:01 3D9.1C2DF6F22D
3   E 04/21/2013 14:47:54 3D9.1C2DF6F22D
4   E 04/21/2013 14:47:54 3D9.1C2DF6F22D
5   E 04/22/2013 17:07:02 3D9.1C2DDAC745
6   E 04/22/2013 17:07:02 3D9.1C2DDAC745
7   E 04/22/2013 17:07:02 3D9.1C2DDAC745
8   F 04/17/2013 15:14:39 3D9.1C2D1DB26E
9   F 04/17/2013 15:14:43 3D9.1C2D1DB26E
10  F 04/17/2013 15:14:43 3D9.1C2D1DB26E
11  F 04/17/2013 15:14:43 3D9.1C2D1DB26E

すべての列がクラス係数であることに注意してください。

于 2013-04-25T15:00:33.403 に答える
0

ldfデータフレームのリストはありますか? もしそうなら、それらを適切にインデックス付けしていません。クラスのオブジェクトを操作しようとしていますlist。このおもちゃの例を見てください:

L <- list( x=matrix(1:4,nrow=2) , y=matrix(1:4,nrow=2) )
L
#$x
#    [,1] [,2]
#[1,]    1    3
#[2,]    2    4

#$y
#    [,1] [,2]
#[1,]    1    3
#[2,]    2    4

class(L[1])
[1] "list"
class(L[[1]])
[1] "matrix"

ループを使用する必要がないように便利な関数として提供されているため、ループ内で多くのループ構造を使用していますが、これはあまり意味がありません。データのサブセットを使用するlapplyと、 を使用してリスト内の各 data.frame にアクセスし、各データapplyフレームの列全体で使用して、次のstrplitように実行することで、希望する結果を得ることができます。

# Make a list of two data.frames using some of your data
dat1 <- data.frame( x = c("E 04/21/2013 14:05:01 3D9.1C2DF6F22D" , "E 04/21/2013 14:05:01 3D9.1C2DF6F22D") , y = c( "E 04/22/2013 17:07:02 3D9.1C2DDAC745" , "E 04/22/2013 17:07:02 3D9.1C2DDAC745") )
dat2 <- data.frame( x = c("F 04/17/2013 15:14:39 3D9.1C2D1DB26E" , "F 04/17/2013 15:14:43 3D9.1C2D1DB26E") , y = c( "F 04/17/2013 15:14:43 3D9.1C2D1DB26E" , "F 04/17/2013 15:14:43 3D9.1C2D1DB26E") )
dat <- list( dat1 , dat2 )


res <- data.frame( t( data.frame( lapply( dat , function(x) apply( x , 2 , strsplit , " " ) ) ) ) )
names(res) <- c( "Reader" , "Date" , "Time" , "Code" )
rownames(res) <- seq_len( nrow( res ) )
#  Reader       Date     Time           Code
#1      E 04/21/2013 14:05:01 3D9.1C2DF6F22D
#2      E 04/21/2013 14:05:01 3D9.1C2DF6F22D
#3      E 04/22/2013 17:07:02 3D9.1C2DDAC745
#4      E 04/22/2013 17:07:02 3D9.1C2DDAC745
#5      F 04/17/2013 15:14:39 3D9.1C2D1DB26E
#6      F 04/17/2013 15:14:43 3D9.1C2D1DB26E
#7      F 04/17/2013 15:14:43 3D9.1C2D1DB26E
#8      F 04/17/2013 15:14:43 3D9.1C2D1DB26E
于 2013-04-25T14:54:13.513 に答える