0

次のように 3 つのデータ フレームがあります。

d1 <- data.frame(level1 =  c("A", "A", "B", "C", "C"), 
             level2 = c("AA", "AB", "BA", "CA", "CB"))

d2 <- data.frame(level1 =  c("A", "A", "A","B", "B", "C", "C"), 
             level3 = c("1", "2", "4", "2", "3", "1", "5"))

d3<- data.frame(level3 = c("1", "2", "3", "4", "5"), AA = c("v1", "v2", "v3", "v4", "v5"), 
            AB = c("v6", "v7", "v8", "v9", "v10"), BA = c("v11", "v12", "v13", "v14", "v15"), 
            CA = c("v16", "v17", "v18", "v19", "v20"),  CB = c("v21", "v22", "v23", "v24", "v25"))

これらの 3 つのデータ フレームを出力として使用したいと思います。

A <- data.frame(level3 = c("1", "2", "4"), AA = c("v1", "v2", "v4"), AB = c("v6", "v7", "v9"))

B <- data.frame(level3 = c( "2", "3"), BA = c("v12", "v13"))

C <- data.frame(level3 = c("1", "5"), CA = c("v16", "v20"), CB = c("v21", "25"))

提供された 3 つのデータフレーム (d1、d2、および d3) から、「Level1」(A、B、C ..) ごとに個別のデータフレームを取得したいと思います。

これらの出力データフレームには、d1 基準に従う列が含まれている必要があります。行には、d2 の基準に従って一致する level3 番号が含まれている必要があります。

例えば、

d1 によると、AA と AB は A と一致します。したがって、データ フレーム A にはこれらの 2 つの列が含まれている必要があります。

d2 によると、1,2,4 は A と一致するため、これらはデータ フレーム「A」の行である必要があります。

データ フレーム「A」の値は、d3 に基づく必要があります。私は自分自身を説明したことを願っています。ありがとう、

.

これをどのように行うことができるかについてのアイデアはありますか?

私の実際の例では、レベル 1 とレベル 2 の命名法に共通点はありません。

ご協力ありがとうございました、

4

2 に答える 2

1

reshape2 meltdcastmergeの使用split

library(reshape2)
# merge three data sets together (putting d3 in long form)
full <- merge(merge(d1,d2),melt(d3, id = 1, variable.name = 'level2'))
results <- lapply(split(full, full$level1, dcast, formula =level3~level2, value.var = 'value')

# the results are in a list, we can copy to the global environment using `list2env`
# if you want (but you may wish to stay as a list
list2env(results, .GlobalEnv)
于 2013-08-28T06:12:11.413 に答える