複数の条件を考慮して値を合計することで新しい変数を作成したいと考えています(以下を参照してください)。ここで私の現在の問題のようなものまでRコードを見ることができます。条件付き加算による新しいデータフレーム列の記入方法
# The raw dataframe
area <- c("A", "A", "B", "A", "C", "B", "A", "B", "A", "C")
varclass <- c("Z1", "Z1", "Z1", "Z2", "Z1", "Z1", "Z2", "Z1", "Z2", "Z2")
count <- c(45, 56, 2, 8, 345, 3, 98, 2, 6, 9)
df1 <- data.frame(area,
varclass,
count,
stringsAsFactors = FALSE)
df1
# See how df1 looks like...
# area varclass count
#1 A Z1 45
#2 A Z1 56
#3 B Z1 2
#4 A Z2 8
#5 C Z1 345
#6 B Z1 3
#7 A Z2 98
#8 B Z1 2
#9 A Z2 6
#10 C Z2 9
# Building the final dataframe
df2 <- data.frame(unique(df1$area),
stringsAsFactors = FALSE)
names(df2)[1] <- "area"
# See how df2 looks like...
# area
#1 A
#2 B
#3 C
# The new variable to build
df2$Z1_sum <- sum(df1[df1$varclass == "Z1" & df1$area == df2$area,]$count)
# doesn't work
# See what I hope
# area Z1_sum
#1 A 101
#2 B 7
#3 C 345
最後の行からわかるように、私は新しい変数Z1_sumをdf2データベースに構築したいと思います。 Z1_sumはvarclass = "Z1"
とdf1$area
の値がdf2$area
の現在の行(MS ExcelではLC1または$ A2セルIDを使用していることを意味します)の値を満たすdf1データベースからのカウントの合計です。
私はdf1をdf1からdf2を直接構築する方法や、dcast
関数を使って解決策を探しているわけではないことを考慮してください...私は正しい値を返すことができる式がほしいです私の新しいコラムそれは私の余分な条件です。どうして?なぜなら、私は次に他の変数を単なる合計よりも洗練された式で構築するからです。このような条件付き操作をどのように行うかを理解することによって、私は次のステップに進むことができます。
ありがとうございました。
ジェフ
ありがとうございます。最初の提案はうまくいくが、ローマのものと同じ制限がある。あなたの2番目のものは私には正確に見えますが、私のデータセットでは動作しません。エラーメッセージ "$ < - 。data.frame'(' * tmp * '、AZ_tx、value = c(96L、24L、84L、12L、:置換は105行、データは322です。 –
それは本当です。それを克服することは可能でしょうか?他のアイデア?私は最初、 "&df1 $ area == ??"のような引数を追加することを考えました。どこ?出力行を考慮してdf2 $領域の相対値を与える... –
あなたの編集のために多くのありがとう。それは非常にうれしいです。しかし、私は最終的に新しい列をより洗練された操作で満たすために、データフレームを再形成/変更することは望ましくありません。 Z1_sumをZ2_sumで除算し、100を掛けた結果を使って、1つのステップ "newvar2"で作成したいと認めている... –