2017-03-22 5 views
1

生データに基づいて生成されたデータフレームのリストからテーブルをクロス集計しようとしています。元のデータフレームは、8つの変数の1004回の観測から構成されています。データフレームをリストに格納した後、コルネームとrownamesは使用できなくなりました

変数「DECADE」の各レベル(21年間あります)のデータフレームを取得したかったのです。私は、次のでした:

> mydata.split<-split(mydata, mydata$DECADE) 

# remove the column "DECADE" since no longer needed 

> mydata.split<-lapply(mydata.split, function(x) x=x[, -7]) 

    > french.split[1:2] # outputs the first two elements of the list 
    $`1500` 
     ARTICLE COMPSYNT2 POSITION COMPTYPE SUBSTYPE2 VARIANT GENRE2 
    1  No NFClau  Med  SoA  Contr Lieu Poetry 

    $`1510` 
     ARTICLE COMPSYNT2 POSITION COMPTYPE SUBSTYPE2 VARIANT GENRE2 
    2  No PronPers  Fin  Hum  Contr Lieu  Novel 
    3  No  NP  Init  Hum  Repl Lieu  Novel 
    4  No  NP  Init  Conc  Subst Lieu Treat_Ess 

次に、変数「変異体」の関数でリストのクロス集計各データフレームのために、私は別々に各テーブルにアクセスし、forループ用内クロス集計を適用しました列1:nに列「VARIANT」を置き、すべてのデータフレームを1つに(各10年ごとに)スタックしようとしましたが、失敗しました。

> y1560s<-as.data.frame(mydata.split[6]) 

> for(i in 1:ncol(y1560s)){ 
    + cross.table<-table(y1560s[, i], y1560s[, 6]) 
    + data.list<-append(cross.table, data.list) 
    + big.table<-do.call(cbind, data.list) 
    + } 

は、出力は非常に奇妙です:期待された何

> head(big.table) 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] 
    [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26] [,27] 
    [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37] [,38] [,39] [,40] 
    [,41] [,42] [,43] [,44] [,45] [,46] [,47] [,48] [,49] [,50] [,51] [,52] [,53] 
    [,54] [,55] [,56] [,57] [,58] [,59] [,60] [,61] [,62] [,63] [,64] [,65] [,66] 
    [,67] [,68] [,69] [,70] [,71] [,72] [,73] [,74] [,75] [,76] [,77] [,78] [,79] 
    [,80] [,81] [,82] [,83] [,84] [,85] [,86] [,87] [,88] [,89] [,90] [,91] [,92] 

は、以下のような大きなテーブルであるが、その後、採用プロセスはかなり面倒です。

> article<-table(y1560s[, 1], y1560s[, 6]) 
> compsynt<-table(y1560s[, 2], y1560s[, 6]) 
> position<-table(y1560s[, 3], y1560s[, 6]) 
> comptype<-table(y1560s[, 4], y1560s[, 6]) 
> substype<-table(y1560s[, 5], y1560s[, 6]) 
> genre<-table(y1560s[, 7], y1560s[, 6]) 
> big.table<-rbind(article, compsynt, position, comptype, substype, genre) 
> big.table 
      Lieu Place 
No   14  4 
Yes   0  3 
AdjP   0  0 
DetPoss  0  4 
Gap   0  0 
NFClau  6  0 
NP   6  2 
Num   0  0 
ProForm  2  1 
PronPers  0  0 
PronPoss  0  0 
SubClau  0  0 
Fin   7  5 
Init   2  2 
Med   5  0 
Abstr  3  1 
Act   0  0 
Anim   0  0 
Conc   2  0 
Hum   1  6 
Plant  2  0 
Prop   0  0 
SoA   6  0 
Comp   0  0 
Conc   0  0 
Contr  6  1 
Dep   0  2 
Emp   0  1 
Repl   4  2 
Subst  4  1 
Corresp  0  0 
Drama  1  1 
Memoirs  0  0 
Non-Litt  0  0 
Novel  0  1 
Other  0  0 
Pamphlet  0  0 
Poetry  0  1 
Rhetoric  0  0 
Travel  0  0 
Treat_Ess 13  4 
Undef  0  0 

1の簡単な方法はあります)数十年のリストに格納されたデータフレームをアクセスし、2)数十年のリストの各要素に対して一定として変数「変異体」とすべてのテーブルを積層します?

ご連絡いただきありがとうございます。

CBechet。

EDIT:次のように試してみると、結果のデータフレームを後で処理するためのリストに格納することはできません。

> for(i in 1:length(mydata.split)) { 
+ mytable<-as.data.frame(mydata.split[i]) 
+ article<-table(mytable[, 2], mytable[, 1]) 
+ compsynt<-table(mytable[, 3], mytable[, 1]) 
+ position<-table(mytable[, 4], mytable[, 1]) 
+ comptype<-table(mytable[, 5], mytable[, 1]) 
+ substype<-table(mytable[, 6], mytable[, 1]) 
+ genre<-table(mytable[, 7], mytable[, 1]) 
+ big.table<-as.data.frame(rbind(article, compsynt, position, comptype, substype, genre)) 
} 
+0

それがおそらくです。ちょうど 'big.table [1:5、1:5]'かそのようなものを見て、その情報が周りにあることを確認してください。 – A5C1D2H2I1M1N2O1R2T1

+0

実際には存在しないため、これらの列の値を取得することはできません。大きなテーブルがベクトル化されたようです。 – CBechet

答えて

1

ご説明し、あなたの編集に掲載さが、あなたのデータの再現性のサンプルを持っていないコードに基づいて、私は次のようなアプローチを提案します。

これは、あなたが期待している出力、すべてがcrosstabの非常に大きなテーブルを達成するはずです。

do.call(what = rbind, args = 
      sapply(mydata.split, function(a_decade){ 
      my_table <- as.data.frame(a_decade) 
      lapply(1:7, function(a_column){ 
       table(my_table[, a_column], my_table[, 1]) 
      }) 
      }) 
) 
+0

その間、私は私の問題を解決しました。しかし、このトリックには本当にありがとう! – CBechet

1

単にmydata.splitリストにあなたのbigTables同じ長さのリストについては、lapplyに有望forループコードを変換:

bigTablesList <- lapply(mydata.split, function(mytable) { 
    article <- table(mytable[, 2], mytable[, 1]) 
    compsynt <- table(mytable[, 3], mytable[, 1]) 
    position <- table(mytable[, 4], mytable[, 1]) 
    comptype <- table(mytable[, 5], mytable[, 1]) 
    substype <- table(mytable[, 6], mytable[, 1]) 
    genre <- table(mytable[, 7], mytable[, 1]) 
    as.data.frame(rbind(article, compsynt, position, comptype, substype, genre)) 
}) 
関連する問題