データ リストの 1 つの列から用語を抽出しました。現在、これらの用語は構造化されていないリストになっています (それともベクトルですか? 残念ながら、どのように判断すればよいかわかりません)。序盤はこんな感じです。
> data$C1
[1] "GERMANY" "GERMANY" "GERMANY" "GERMANY" "FRANCE" "FRANCE" "GERMANY" "ITALY"
さらに分析するために、これらの用語を最初に抽出したデータ リストのレコードに再割り当てしたいと思います。私の例では、最初のレコードには 3 つの用語が含まれており、2 番目のレコードには 2 つ、3 番目と 4 番目のレコードにはそれぞれ 2 つの用語が含まれています。したがって、これは正しい出力になります。
> data$C1
[1] "GERMANY" "GERMANY" "GERMANY"
[2] "GERMANY"
[3] "FRANCE" "FRANCE"
[4] "GERMANY" "ITALY"
これは、各レコードの用語数をカウントする方法です。
> count <- sapply(data$C1, length)
> count
[1] 3 1 2 2
これは、8 番目の項が 4 番目のレコードに属していることを確認する方法です。
> number <- rep(1:length(count), count)
> number
[1] 1 1 1 2 3 3 4 4
> number[8]
[1] 4
しかし、これらのステートメントを使用して目的の出力を達成するにはどうすればよいでしょうか? 繰り返しになりますが、最初の 3 つの用語を最初のレコードに割り当て、次の用語 (全体で 4 番目の用語) を 2 番目のレコードに割り当て、次の 2 つ (リストの 5 番目と 6 番目) を 3 番目のレコードに割り当てたいと思います。 7番目と8番目の1から4番目のレコードなど。これはどのように行うことができますか?
事前にどうもありがとうございました!
編集:
多くのタブ区切りのテキスト ファイルを R にインポートしました。これにより、それらが 1 つの大きなデータ リストになります。55 列あり (そのうちの 1 つは data$C1 です)、各テキスト ファイルには最大 501 行 (ヘッダーと 500 レコード) が含まれます。data$C1 にはアドレス文字列が含まれています。これらを 1 つの住所に分割し、そこから国名を抽出しました。元の列と構造化されていないリストをより明確に区別するために、名前を変更しました。
> data$C1 #original before extraction (each line is a new record)
[1] "UNIV POTSDAM,DEPT PHYS,D-14415 POTSDAM,GERMANY; UNIV OLDENBURG,DEPT CHEM,D-26111 OLDENBURG,GERMANY; TECH UNIV CAROLO WILHELMINA BRAUNSCHWEIG,INST ORGAN CHEM,D-38106 BRAUNSCHWEIG,GERMANY"
[2] "TECH UNIV BERLIN,FACHBEREICH MATH,D-10623 BERLIN,GERMANY"
[3] "UNIV GRENOBLE 1,F-38041 GRENOBLE,FRANCE; UNIV PARIS 06,PARIS,FRANCE"
[4] "UNIV AUGSBURG, FACHBEREICH PHYS, D-86135 AUGSBURG, GERMANY; JOINT RES CTR ISPRA, MARINE ENVIRONM UNIT, I-21020 ISPRA, ITALY"
...
これは、抽出された用語の現在の出力です。
C1a
[1] 「ドイツ」「ドイツ」「ドイツ」「ドイツ」「フランス」「フランス」「ドイツ」「イタリア」
…
これは私が探している正しい出力です:
> C1a #extracted terms
[1] "GERMANY" "GERMANY" "GERMANY"
[2] "GERMANY"
[3] "FRANCE" "FRANCE"
[4] "GERMANY" "ITALY"
...
これらの 8 つの要素は、データ リストの先頭/先頭の例にすぎません。その 4 つのレコードには、抽出された 8 つの用語が含まれています。
> tapply(C1a, number, c)
Error in tapply(data$C1, number, c) : all arguments must have the same length
> length(number)
[1] 4
> length(data$C1)
[1] 4
> length(C1a)
[1] 8
他の列の 1 つを使用して用語を再割り当てできますか? これは data$UT (Unique Article Identifier) であり、すべてのレコードには一意のレコードがあります。値の例は次のとおりです。
WOS:000300676300055
WOS:A1995QQ99100006
誰かが私が正しい出力を達成するのを手伝ってくれるほど親切でしょうか?