R إنشاء نسخة من عمود حيث يتم تعويض العمود الجديد ببعض المبلغ الثابت
سؤال
أتطلع إلى إنشاء نسخة من عمود موجود في إطار بيانات يقابله عدد من الصفوف.
على سبيل المثال ، إذا كان العمود 2 عبارة عن نسخة من العمود 1 تعويض عن 1 ، ثم
> dataframe
$column1
[1] 1 2 3 4 5
$column2
[1] 0 1 2 3 4
لقد حققت بعض النجاح في الكود التالي:
offset7 <- rep(0, 7)
dataframe$column1.prev7 = c(offset7, dataframe$column1[1:(length(dataframe$column1)-7)])
ومع ذلك ، فإنه يبدأ في إعطاء الأخطاء إذا تعوضت عن 30 أو أكثر. بياناتي طويلة بما يكفي حتى لا تكون هذه مشكلة في الإزاحة أكبر من عدد الصفوف. الخطأ هو:
Error in dataframe$column1[1:(length(dataframe$column1) - 30)] :
only 0's may be mixed with negative subscripts
شكرا لك مقدما! سيتم تفضيل نسخة مجانية حلقة سريعة تلعب مع Plyr. القصد هنا هو تقسيم بيانات Timeseries إلى متخلفات مختلفة حتى عام ثم تحليل النتائج بطرق مختلفة.
المحلول
رجاء استخدم فئة من الفئة الزمنية المناسبة لعمليات السلاسل الزمنية. المفضلة الشعبية حديقة حيوان و XTS كلاهما لهما وفرة من الوثائق.
كمثال بسيط ، ضع في اعتبارك
> library(xts)
> foo <- xts(100:109, order.by=Sys.Date()+0:9)
> merge(foo, l1=lag(foo,1), lm1=lag(foo,-1))
foo l1 lm1
2010-11-18 100 NA 101
2010-11-19 101 100 102
2010-11-20 102 101 103
2010-11-21 103 102 104
2010-11-22 104 103 105
2010-11-23 105 104 106
2010-11-24 106 105 107
2010-11-25 107 106 108
2010-11-26 108 107 109
2010-11-27 109 108 NA
>
لكن فقط لا تفعل ذلك باليد. وابحث هنا عن [r] xts" أو [R] Zoo "للبحث في علامة R.
لا تنتمي إلى StackOverflow