ここでは、 "未定義の列を選択"エラーが発生しています。完全開示:私はRに比較的新しいです。Rでマージを使用して2つの集約を結合
私がする必要があるのは、シリアルを2つの部分に分け> 6 & = 6文字に分割することです。ここで
は、Excelでの作業その一例です:
Child Serial Cost
N1647961 64.58
式:=SUMIF(B:B,G98,D:D)+SUMIF(B:B,LEFT(G98,6),D:D)
私が上で、この式を実行するために、独自の子雑誌のリストを作成しました。 B:B
はバニラserial number
ある
、G98
はcolumn D
がcost
で、子のシリアルです。最初に、一致するシリアルの子コストを合計し、その子シリアルの左の6桁を取得し、関連する親コストを合計します。それから、その子供を育てるためのすべての費用がかかります。
「> 6」は「子シリアル」であり、「= 6」は「親シリアル」であるため、親は多くの子を持つことができます。 「子供」は最初の6の後の文字によって区別されます。「123456」は親、「789」は子供です。
df1 <- subset(dBase, nchar(dBase$Serial) = 6)
df2 <- subset(dBase, nchar(dBase$Serial) > 6)
ここで私は、各df1a/B
df1a <- aggregate(df1$process_cost,
list(serial1 = df1$Serial),
FUN = sum)
df2a <- aggregate(df2$process_cost,
list(serial2 = df2$Serial),
FUN = sum)
ここまで
作品における親&子シリアルあたりのコストを集計しています。
ここで、これらのコストをdf2aに「マージ」しようとしています。そのため、すべての費用を親に負担させてから、すべての費用を子供に配分して合計して親子ペアごとにコストが表示されます。次に、このdf3をメインのdf(またはこの例ではdfを使用しているdBase)にマージし、メインファイルに表示するためのコストを整理しました。
問題ここでは、「未定義の列を選択しました」というエラーが表示されます。私はこれを完全に難しくしていますか?
df3 <- merge(df2a,
df1a[,c(df1a$serial1, df1a$x)],
by = substr(df2a$serial2,1, 6))
サンプル:ここでは、例えば両親をdisectできるようにしたいです123456とそれを子供のコストとマッチさせれば、ここでは10なので、総費用は11であり、987654では22となる。親は、 "123456-789"、 "123456-333"、 "123456-114"というように、複数の子を持つことができます。 (例を明確にするためにダッシュを追加)。
serial <- c('123456','987654', '000001', '000002', '123456789', '987654321', '0000', '000002345')
costs <- c(1, 2, 3, 4, 10, 20, 30, 40)
df <- data.frame(serial, costs)
serial costs
1 123456 1
2 987654 2
3 000001 3
4 000002 4
5 123456789 10
6 987654321 20
7 0000
8 000002345 40
申し訳ありませんが、例を追加しましたが、 "="は6、親は "> 6"は子です。 –
私はちょうど混乱の魔法使いですか?ハ!はい、私はこのSOの投稿のためにすべてを "df"に変更しました。 "123456"& "789"の子はサンプルに使用されたばかりです。実際のシリアルは複数の文字(「D12945」など)です。これはデータ型の問題でしょうか?シリアルのtypeof =文字 –
編集のためのThx!文字はprobではありません。 by節はprobであり、式ではなく列名のみを含むことができます。 –