それが私のデータフレームです
Colour = c("red", "blue", "red", "blue", "yellow", "green", "red", "blue", "green", "red", "yellow", "blue")
Volume = c(46,46,57,57,57,57,99,99,99,111,111,122)
Cases = c(7,2,4,2,3,5,1,2,3,2,4,1)
df = data.frame(Colour, Volume, Cases)
"red"
Color がOR"blue"
で Volume が同一のケースを合計したい。指定されていない色は保持する必要があります。赤と青が異なるために合計できない場合はVolume
、それらも保持する必要があります
結果は次のようになります。
Colour = c("red_or_blue","red_or_blue","yellow","green","red_or_blue","green","red","yellow","blue")
Volume = c(46,57,57,57,99,99,111,111,122)
Cases = c(9,6,3,5,3,3,2,4,1)
df_agg = data.frame(Colour, Volume, Cases)
"red_or_blue"
赤または青の行に を割り当て、残りの行に x を割り当てる列をさらに作成する方法を見つけました。次に、集計を使用しました:
df$test = ifelse(df$Colour %in% c("red", "blue"),"red_or_blue","x")
df_agg = aggregate(df$Cases, list(df$Volume, df$test), sum)
それは機能しますが、これは少し面倒だと思いました。余分な列の作成をスキップするより便利な方法はありますか? 将来的には、赤/青とボリューム 57/99 のケースを合計する必要があります。余分な列があると、少し扱いにくくなるようです。
また、元の色が赤でも青でもないと引き継がれませんでした。私はこの方法で試しましたが、うまくいきません:
df$test = ifelse(df$Colour %in% c("red", "blue"),"red_or_blue",df$Colour)
乾杯、ポール