ฉันต้องการเพิ่มความแตกต่างและเปอร์เซ็นต์การเปลี่ยนแปลงให้กับทุกคอลัมน์ในดาต้าเฟรม
ฉันสามารถละลายข้อมูลและทำการคำนวณได้ แต่ไม่รู้ว่าจะแปลงหรือปรับรูปร่างกลับเข้าด้วยกันได้อย่างไร ฉันยังมีข้อสงสัยเล็กๆ น้อยๆ ว่าสิ่งนี้สามารถสำเร็จได้อย่างง่ายดายด้วย plyr แต่แถว n-1 ที่ส่งคืนโดย diff()
ทำให้เกิดปัญหากับฉัน
การใช้ชุดข้อมูลที่รวมอยู่:
library(plyr)
library(quantmod)
head(longley)
GNP.deflator GNP Unemployed Armed.Forces Population Year Employed
1947 83.0 234.289 235.6 159.0 107.608 1947 60.323
1948 88.5 259.426 232.5 145.6 108.632 1948 61.122
1949 88.2 258.054 368.2 161.6 109.773 1949 60.171
1950 89.5 284.599 335.1 165.0 110.929 1950 61.187
1951 96.2 328.975 209.9 309.9 112.075 1951 63.221
1952 98.1 346.999 193.2 359.4 113.270 1952 63.639
longley.m <- melt(longley, id="Year")
longley.m <- ddply(longley.m, .(variable), transform, valdiff=diff(c(NA, value)), valdelt=Delt(value))
head(longley.m)
Year variable value valdiff Delt.1.arithmetic
1 1947 GNP.deflator 83.0 NA NA
2 1948 GNP.deflator 88.5 5.5 0.066265060
3 1949 GNP.deflator 88.2 -0.3 -0.003389831
4 1950 GNP.deflator 89.5 1.3 0.014739229
5 1951 GNP.deflator 96.2 6.7 0.074860335
6 1952 GNP.deflator 98.1 1.9 0.019750520
(ฉันไม่รู้ว่าทำไม Delt ถึงสร้างชื่อคอลัมน์เป็นของตัวเอง แต่ฉันยอมแพ้แล้ว)
ตอนนี้ ฉันสามารถ cast(longley.m, Year ~ variable)
เพื่อกลับไปยังชุดข้อมูลเดิมได้ แต่ฉันต้องการให้มีความแตกต่างและเปอร์เซ็นต์การเปลี่ยนแปลงสำหรับแต่ละตัวแปรในคอลัมน์ที่แตกต่างกัน โดยไม่ต้องทำการคำนวณด้วยตนเองกับตัวแปรแต่ละตัว จากนั้นจึงรวมกลับเข้าด้วยกัน ฉันค่อนข้างมั่นใจว่าฉันได้ลองนักแสดงทุกรูปแบบแล้ว แต่ก็ไม่ได้ผล...
อัปเดต: Joran แก้ไขปัญหาการตั้งชื่อคอลัมน์ Delt: บังคับด้วย as.vector!