私の仕事では非常に一般的なデータ前処理の問題があります。私は通常、最終的に大規模なマッチング操作を実行したい2つのファイルを持っています。これは通常、2つのステップのプロセスであり、最初のステップでは最初のファイルの「クリーンな」データフレームを作成し、2番目のステップではより大きなデータフレームの2番目のファイルと一致(vlookup)します。この質問の最初のステップで助けが必要です。以下に、作業する簡単な例を作成しました。私の簡略化されたデータフレーム:
c1 <- 1:15
c2 <- c("Valuelabels", "V1", "1", "2", "Valuelabels", "V2", "1", "2", "3", "Valuelabels", "V3", "1", "2", "3", "4")
c3 <- c("", "", "Male", "Female", "", "", "Married", "Single", "Other", "", "", "SingleWithChildren", "SingleWithoutChildren","MarriedWithChildren", "PartneredWithChildren")
df <- data.frame(row.names =c1,c2,c3)
df
c2 c3
1 Valuelabels
2 V1
3 1 Male
4 2 Female
5 Valuelabels
6 V2
7 1 Married
8 2 Single
9 3 Other
10 Valuelabels
11 V3
12 1 SingleWithChildren
13 2 SingleWithoutChildren
14 3 MarriedWithChildren
15 4 PartneredWithChildren
ここで、最初の列の「Valuelabel」文字列のデータフレームを分割して、次のような新しいデータフレームを作成します。
V1 V1_match V2 V2_match V3 V3_match
1: 1 Male 1 Married 1 SingleWithChildren
2: 2 Female 2 Single 2 SingleWithoutChildren
3: NA 3 Other 3 MarriedWithChildren
4: NA NA 4 PartneredWithChildren
最後に、V1を列名として、それらの下の一致する値を、私の例のV1_match ...などの名前の横にある新しい列としてV2からV3まで使用してデータフレームを作成したいと思います。
このデータフレームは、より大きなデータフレームと照合する前に、私のステップ1を終了します。
助けてくれてとても素晴らしい。
考えられるdata.table
解決策は次のとおりです
library(data.table) # v 1.9.5
setDT(df)[, indx := c2[2L], by = cumsum(c2 == "Valuelabels")]
df2 <- df[!grepl("\\D", c2)][, indx2 := seq_len(.N), by = indx]
dcast(df2, indx2 ~ indx, value.var = c("c2", "c3"))
# indx2 V1_c2 V2_c2 V3_c2 V1_c3 V2_c3 V3_c3
# 1: 1 1 1 1 Male Married SingleWithChildren
# 2: 2 2 2 2 Female Single SingleWithoutChildren
# 3: 3 NA 3 3 NA Other MarriedWithChildren
# 4: 4 NA NA 4 NA NA PartneredWithChildren
data.table
を使用してこれを実行するには、v> 1.9.5をインストールする必要があります
library(devtools)
install_github("Rdatatable/data.table", build_vignettes = FALSE)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加