データフレーム内のデータの並べ替え(順序の削除/変更)列 -- r フィールド と dataframe フィールド 関連 問題

Reordering (deleting/changing order) columns of data in data frame












1
vote

問題

日本語

私は2つの大きなデータセットを持っています、そして、古いデータ・セットを新しいデータ・セットと同じ順序で置くために古いデータ・セットを再フォーマットしようとしています(それぞれの同一の質問でTテストを簡単に実行することができます。データセット間の2年間で。古いバージョンから変更するときに新しいバージョンが削除され、追加された質問があります。

これを試みてきた方法は、私が把握することができるように、rのためにクラッシュし続けて、ベクトルが大きすぎる。しかし、彼らがこの大きなものになる方法はわかりません。以下は私がしていることです:

両方のデータセットは同じフォーマットを持ちます。元のセットは、古くて418のための415です。新しいデータセットの最初の約158個のコールを古いものに一致させたいです。各データセットはQ1~Q415の列名を持ち、各列のデータは数値1~5またはNAです。質問/列ごとに約100回の回答があります。古いデータセットには、より多くの回答人があります(新規VS 114行の140行)。例は以下の通りです(しかし、フルセットに400以上の列があると100行を超える列がある!)

以下はどのようなデータ.OLDのように見えるかの例です。 Data.newは同じデータ。NEWの数が多くの番号/ NA回答があります。ここでは、質問1から20と最初の10行を表示します。 DATA.OLD = 418列(Q1がQ418)x 140行 data.new = 415列(Q1からQ415)x 114行 私はData.oldの最初の170列のData.oldを一致させる必要があります.new これを行うには、Data.old(Data.oldアンケートにあった質問(Data.oldアンケートにあった質問、Data.newアンケート)から削除しますが、データ..old(NASが含まれます。) 。data.newに存在しなかった新しい質問が紹介された場所.OLDアンケート)

<事前> <コード> >data.old q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 q16 q17 q18 q19 q20 1 3 4 3 3 5 4 1 NA 4 NA 1 2 NA 5 4 3 2 3 1 3 4 5 2 2 4 NA 1 3 2 5 2 NA 3 2 1 4 3 2 NA 2 NA 2 3 2 1 4 3 5 1 2 3 4 3 NA NA 2 1 2 5 1 2 4 1 2 5 2 3 2 1 3 NA NA 2 1 5 5 NA 2 3 4 3 NA 2 1 NA 3 4 2 2 1 4 5 5 NA 3 2 3 4 1 5 2 1 5 3 2 3 3 NA 2 1 5 4 3 4 5 3 NA 2 NA NA 2 4 1 5 5 NA NA 2 NA 1 3 3 3 4 4 5 5 3 1 4 5 4 5 5 4 3 4 3 2 5 NA 2 NA 2 3 5 4 5 4 2 2 3 4 1 5 5 3 NA 2 1 3 5 4 NA 2 3 4 3 2 2 1 5 3 NA 2 3 NA 4 5 5 3 2 NA 2 3 1 3 2 4

SO SOSでは、いくつかの質問は削除され、いくつかの新しいものが追加され、いくつかの新しい注文が追加され、私はそれらを再び結合する必要がある順序で古いデータのサブセットを通過して作成しました。新しいデータセット。古いデータ・セットに質問が存在しない場合は、新しいデータ・セット内の質問を使用して(理論的に)大きなループでTテストを実行できるようにします。

<事前> <コード> dataold.set1 <- dataold[1:16] dataold.set2 <- dataold[18:19] dataold.set3 <- dataold[21:23] dataold.set4 <- dataold[25:26] dataold.set5 <- dataold[30:33] dataold.set6 <- dataold[35:36] dataold.set7 <- dataold[38:39] dataold.set8 <- dataold[41:42] dataold.set9 <- dataold[44] dataold.set10 <- dataold[46:47] dataold.set11 <- dataold[49:54] dataold.set12 <- datanew[43:49] dataold.set13 <- dataold[62:85] dataold.set14 <- dataold[87:90] dataold.set15 <- datanew[78] dataold.set16 <- dataold[91:142] dataold.set17 <- dataold[149:161] dataold.set18 <- dataold[55:61] dataold.set19 <- dataold[163:170]

私は列を1つのセットにまとめて戻していました 私は両方を試しました

<事前> <コード> dataold.adjust <- merge(dataold.set1, dataold.set2) dataold.adjust <- merge(dataold.adjust, dataold.set3) dataold.adjust <- merge(dataold.adjust, dataold.set4)

そして私も試してみました

<事前> <コード> dataold.adjust <- cbind(dataold.set1, dataold.set2, dataold.set3)

しかし、私がこれらの機能を実行しようとするたびに、Rが凍結してからクラッシュします。私はそれがエラーを一度表示するようにそれを取得し、それが10 MBのベクトルで動作できなかったと言った後、1000 MB以上のベクトルを含む複数のエラーを得ました。これがテーブル内のデータ内の23列のデータしかないセット3でクラッシュしている場合、私のベクトルがそれほど大きいということは本当にわかりません、そして、テーブル内の23列のデータであるデータセットは長さ400列を超えています。< / P>

これを行う方法は、プログラムがクラッシュしてメモリの問題を招くことがない(そして100列を超える列名を入力する必要がありません)、またはここでコードの要素がいくつかあります。私は私がメモリシンクを手に入れたところにありませんか?私はそれを撃つことを試みていて、この仕事をする方法を考え出すことなく、rクラッシュしたrの扱いを費やしていた。

助けがありがとう!

英語

I have two large data sets and I am attempting to reformat the older data set to put the questions in the same order as the newer data set (so that I can easily perform t-tests on each identical question to track significant changes over the 2 years between data sets). The new version both deleted and added questions when changing from the old version.

The way I've been attempting to do this, R keeps crashing due to, as best I can figure, vectors being too large. I'm not sure how they are getting to be this large, however! Below is what I am doing:

Both data sets have the same format. The original sets are 415 for the new and 418 for the old. I want to match the first approximately 158 colums of the new data set to the old. Each data set has column names which are q1-q415 and the data in each column is numerical 1-5 or NA. There are approximately 100 answers per question/column, the old data set has more respondants (140 rows in old vs 114 rows in new). An example is below (but keep in mind there are over 400 columns in the full set and over 100 rows!)

The following is an example of what data.old looks like. data.new looks the same only data.new has more Rows of number/na answers. Here I show questions 1 through 20 and the first 10 rows. data.old = 418 columns (q1 though q418) x 140 rows data.new = 415 columns (q1 through q415) x 114 rows I need to match the first 170 COLUMNS of data.old to the first 157 COLUMNS of data.new To do this, I will be deleting 17 columns from data.old (questions that were in the data.old questionnaire and deleted from the data.new questionnaire) but also adding 7 new columns to data.old (which will contain NAs... place holders for where data.new had new questions introducted that did not exist in data.old questionnaire)

    >data.old     q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 q16 q17 q18 q19 q20     1  3  4  3  3  5  4  1  NA  4  NA  1   2    NA  5   4  3    2   3   1     3  4  5  2  2  4  NA 1   3  2  5   2   NA   3   2   1  4    3   2   NA     2  NA 2  3  2  1  4  3   5  1  2   3   4    3   NA  NA 2    1   2   5     1  2  4  1  2  5  2  3   2  1  3   NA  NA   2   1   5  5    NA  2   3     4  3  NA 2  1  NA 3  4   2  2  1   4   5    5   NA  3  2    3   4   1     5  2  1  5  3  2  3  3  NA  2  1   5   4    3   4   5  3    NA  2   NA     NA 2  4  1  5  5  NA NA  2  NA 1   3   3    3   4   4  5    5   3   1     4  5  4  5  5  4  3  4   3  2  5   NA  2    NA  2   3  5    4   5   4     2  2  3  4  1  5  5  3  NA  2  1   3   5    4   NA  2  3    4   3   2     2  1  5  3  NA 2  3  NA  4  5  5   3   2    NA  2   3  1    3   2   4 

So in the new set, some of the questions were deleted, some new ones were added, and some changed order, so I went through and created subsets of old data in the order that I would need to combine them again to match the new dataset. When a question does not exist in the old data set, I want to use the question in the new data set so that I can (theoretically) perform my t-tests in a big loop.

    dataold.set1 <- dataold[1:16]     dataold.set2 <- dataold[18:19]     dataold.set3 <- dataold[21:23]     dataold.set4 <- dataold[25:26]     dataold.set5 <- dataold[30:33]     dataold.set6 <- dataold[35:36]     dataold.set7 <- dataold[38:39]     dataold.set8 <- dataold[41:42]     dataold.set9 <- dataold[44]     dataold.set10 <- dataold[46:47]     dataold.set11 <- dataold[49:54]     dataold.set12 <- datanew[43:49]     dataold.set13 <- dataold[62:85]     dataold.set14 <- dataold[87:90]     dataold.set15 <- datanew[78]     dataold.set16 <- dataold[91:142]     dataold.set17 <- dataold[149:161]     dataold.set18 <- dataold[55:61]     dataold.set19 <- dataold[163:170] 

I then was attempting to put the columns back together into one set I tried both

    dataold.adjust <- merge(dataold.set1, dataold.set2)     dataold.adjust <- merge(dataold.adjust, dataold.set3)     dataold.adjust <- merge(dataold.adjust, dataold.set4) 

and I also tried

    dataold.adjust <- cbind(dataold.set1, dataold.set2, dataold.set3) 

However, every time I try to perform these functions, R freezes, then crashes. I managed to get it to display an error once, and it said it could not work with a vector of 10 Mb, and then I got multiple errors involving over 1000 Mb vectors. I'm not really sure how my vectors are that large, when this is crashing out by set 3, which is only 23 columns of data in a table, and the data sets I'm normally using are over 400 columns in length.

Is there another way to do this that won't cause my program to crash and have memory issues (and won't require me typing out the column names of over 100 columns), or is there some element of code here that I am missing where I'm getting a memory sink? I've been attempting to trouble shoot it and have spent an hour dealing with R crashing without any luck figuring out how to make this work.

Thanks for the assistance!

</div
     

回答リスト

5
 
vote
vote
ベストアンサー
 

あなたはあなたのデータの不要なコピーをトンし、あなたは最後のオブジェクトを増やしている( dataold.adjust )。列に正しく注文するベクトルが必要です。

<事前> <コード> cols1 <- c(1:16,18:19,21:23,25:26,30:33,35:36,38:39,41:42,44,46:47,49:54) cols2 <- c(62:85,87:90) cols3 <- c(91:142,149:161,55:61,163:170) # merge old / new data by row and add NA for unmatched rows dataold.adjust <- merge(data.old[,c(cols1,cols2,cols3)], data.new[,c(43:49,78)], by="row.names", all=TRUE) # put columns in desired order dataold.adjust <- dataold.adjust[,c(1:length(cols1), # 1st cols from dataold ncol(dataold.adjust)-length(43:49):1, # 1st cols from datanew (length(cols1)+1):length(cols2), # 2nd cols from dataold ncol(dataold.adjust), # 2nd cols from datanew (length(cols1)+length(cols2)+1):length(cols3))] # 3rd cols from dataold

最後の部分は絶対的なkludgeですが、今日は自己課税された制限時間を打ちました。 :)

 

You're making tons of unnecessary copies of your data and then you're growing the final object (dataold.adjust). You just need a vector that orders the columns correctly:

cols1 <- c(1:16,18:19,21:23,25:26,30:33,35:36,38:39,41:42,44,46:47,49:54) cols2 <- c(62:85,87:90) cols3 <- c(91:142,149:161,55:61,163:170) # merge old / new data by row and add NA for unmatched rows dataold.adjust <- merge(data.old[,c(cols1,cols2,cols3)],   data.new[,c(43:49,78)], by="row.names", all=TRUE) # put columns in desired order dataold.adjust <- dataold.adjust[,c(1:length(cols1),  # 1st cols from dataold   ncol(dataold.adjust)-length(43:49):1,               # 1st cols from datanew   (length(cols1)+1):length(cols2),                    # 2nd cols from dataold   ncol(dataold.adjust),                               # 2nd cols from datanew   (length(cols1)+length(cols2)+1):length(cols3))]     # 3rd cols from dataold 

The last part is an absolute kludge, but I've hit my self-imposed time limit for SO today. :)

</div
 
 
         
         

関連する質問

1  データフレーム内のエントリの変更は、2つの値の間にあるか、値の下にあるかどうかに応じて  ( Changing entries in a dataframe depending on whether they are between two values ) 
私は1列の距離を持つデータフレームと他の列のスコア、例えば <事前> <コード> Distance Scores 1000. 1 1500. 1 ETC。 私は言う区分的な機能を持っています: 距離&gt = 1000の場合、スコアをゼロに変...

12  Rの重複属性を持つ行を取り除きます  ( Get rid of rows with duplicate attributes in r ) 
私は次のような列を持つ大きなデータフレームを持っています。 <事前> <コード> ID, time, OS, IP そのデータフレームの各行は1つのエントリに対応します。一部の IDS 複数のエントリ(行)のデータフレーム内には存在します。それらの複数行を...

2  パンダの行を変更します  ( Change rows in pandas ) 
Pandasデータフレームにマトリックスを持っています <事前> <コード> print dfMatrix 0 1 2 3 4 0 10000 10 8 11 ...

1  タプルを鍵と値として辞書するPandas DataFrame  ( Pandas dataframe to dictionary with tuples as key and values ) 
私は以下の手助けが必要です: 私は以下のようにCSVファイルを持っていて、データフレーム 'DF'にロードされます。複数の領域、メモリ、VCPU、および各 '名前'に対応するストレージには異なる値があります。このデータフレームには1700行があります。 ...

96  データフレームセル内のリストを別々の行に爆発させる方法  ( How to explode a list inside a dataframe cell into separate rows ) 
リストを含むPandasセルをそれらの値それぞれの行に変えることを目指しています。 だから、これを取ります: nearest_neighbors 列の値を解凍してスタックしたい場合は、各値が各 opponent indextでは行になるようにしてく...

1  Pandas Groupbyをグループ行グループに使用するには、列値を合計して決定できますか?  ( Can you use pandas groupby to group rows determined by summing a column value ) 
データフレームの行を1列の値でグループ化したいと思います。以下に示す例は、iが150の値で 'NumberOfTrades'の値をグループ化していた場合であるので、上位2行がグループ化され、下位3行がグループ化されます。私が理解している次のステップは、各グルー...

1  データフレームの各列をフィルタリングすると、比類のない値の場合はNA  ( Filtering each column of a data frame an put na for unmatched values ) 
私は以下のような表を持っています: <事前> <コード> [,1] [,2] [,3] [,4] [,5] [1,] a A 0.06 0.31 -1.5 [2,] b B -0.75 0.2 ...

4  rbind()を使用して、複数のデータフレームを1つの大きさのデータに組み合わせる。  ( Using rbind to combine multiple data frames into one larger data frame within ) 
R-Studio 0.99.491とRバージョン3.2.3(2015-12-10)を使用しています。私はrの相対的なニュービーです、そして私はいくつかの助けに感謝します。私は、古いメディアサーバー上のサーバーログを使用しようとしているプロジェクトをやっていま...

1  R - コマンドライン引数によってデータフレーム名を決定したい  ( R i want data frame name to be determined by a command line argument ) 
コマンドライン引数でデータフレーム名を決定したいです。以下は、私がやろうとしていることを明確にするようにしてください...私は願っています! 使用: <事前> <コード> Context ctx = getApplicationContext(); S...

0  Pandasを使って最寄りの分をマージします  ( Merge with the nearest minute using pandas ) 
私は単に±1分の間隔で2つのデータフレームをマージしたいです。 ここにサンプルデータセットを持つname_df: <事前> <コード> Name Date A 2/19/2019 17:16:15 B 2/19/2019 17:...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有