2012-04-22 5 views
-2

私はこれにタイトルを付けるべきか分かりませんでした。新しいオーバーラップ変数

私は年と活動列を組み合わせたい人、年、および活動

df <- data.frame("id" = c("1", "1", "1", "2", "2","3"), "years" = rep(1971, 6), 
         "activity" = c("a","b","c","d","e","e")) 
    id years activity 
1 1 1971  a 
2 1 1971  b 
3 1 1971  c 
4 2 1971  d 
5 2 1971  e 
6 3 1971  e 

のデータセットを持っていますが、毎年のために、オリジナル年の欄に、私は生成したいです+/- ID

私は2つの段階でこれをやった場合との関連を保持したまま3年、:

id all_years 
1 1968 
1 1969 
1 1970 
1 1971 
1 1972 
1 1973 
1 1974 
:idに 「1」の元年はとてもID 1のための+/- 3年になるだろう、1971年です

ステップ2では、このall_yearsカラムと元のdfのアクティビティカラムを結合し、IDを保持したいとします。したがって、id "1"は3つのアクティビティ(a、b、c)と7年(1968:1964)なので、id "1"は新しい結合カラムに10回表示されます。ありがとう、いつものように

id year_and_activities 
    1 a 
    1 b 
    1 c 
    1 1968 
    1 1969 
    1 1970 
    1 1971 
    1 1972 
    1 1973 
    1 1974 
    2 d 
    2 e 
    2 1968 
... 
    2 1974 
... 
    3 e 
... 

だから、最終的に、私はこのようなものに終わるだろう!

+0

ご希望のものを明確にしてください。あなたの例には 'rep(" 1971 ")、6)'があるので、その6つのインスタンスはどこに行きますか?あなたの出力は単に "df $ id"の各要素を取り、その隣に 'seq(df $ years-3、df $ years + 3)'を貼り付けます。そのシーケンスの6つのインスタンスと、それに続く他のすべての入力年の値と同様の出力ブロックが必要ですか?また、「年」を文字列ではなく数値として残すのはどうですか?物事をもっと簡単に保つでしょう。ああ、 "活動"の値はどうなるの?彼らは "id"か "year"を追跡していますか? –

+0

私は理解できない質問のように思われるものをダウン投票しました。 –

+0

貧しい疑問文言とひどいコードについては申し訳ありません。うまくいけば、これは質問をより分かりやすくします。 – crock1255

答えて

1

私は本当にあなたの質問に従うことができませんでしたが、初期データフレームを考えると、あなたはmeltを使用して、最終的なデータフレームを取得することができます。余談として

require(reshape2) 

##To get your +/- 3 
dd = data.frame(id=df$id, activity=df$activity, 
    years=df$years- rep(-3:3, nrow(df))) 

##Pretty much gives you what you want 
df_melt = melt(dd, id=1) 

##Remove the unnecessary column 
df_melt = df_melt[,c(1,3)] 
##Rename 
colnames(df_melt) = c("id","year_and_activities") 

##Order the column 
df_melt[with(df_melt, order(id, year_and_activities)),] 

、私はとの列を持つことを示唆しています"文字"と "年"の混合はおそらく悪い考えです - しかし、あなたは正当な理由があるかもしれません。

+0

ありがとう!これは間違いなく最後のステップですが、私は+/- 3年の世代を失います。 – crock1255

+0

@ crock1255編集を参照してください。 – csgillespie

関連する問題