2016-07-29 5 views
1

マイデータは、以下の形式を有する:ループ機能カラム名はR

Individual Year X2011Int X2010Int X2009Int X2008Int X2007Int 
     1  2011 10.36703 18.07049 4789.338 51.3443 423.235 
     2  2010 10.36703 18.07049 4789.338 51.3443 423.235 
     3  2009 10.36703 18.07049 4789.338 51.3443 423.235 
     4  2008 10.36703 18.07049 4789.338 51.3443 423.235 

X2009Int、X2008Intは、X2007Int列は、それらの指定された期間に特定のイベントの重大度を表します。私の目的は、私が列にわたってループを作成することができます関数を作成することです以下:

Individual Year   T  T-1   T-2 
    1    2011  =X2011Int =X2010Int =X2009Int 
    2    2010  =X2010Int =X2009Int =X2008Int 
    3    2009  =X2009Int =X2008Int =X2007Int 
    4    2008  =X2008Int =X2007Int =X2006Int 

はさらに私はイベントの強度値が必要になります$ T列の下、2009年に個人の3を取る上で何が起こっているのか説明するためにX2009Int、$ T-1列= X2008Int、$ T-2 = X2007Int、$ T-3 = X2006Intなどからの値。

何か助けてください。

EDIT:

フォローアップ:

を、私はまだ私のforループの問題を抱えています。最初の反復は完全に動作しますが、これ以降は動作しません。データ/コードへ

のリンクは以下のとおりです。 https://drive.google.com/open?id=0B32x3hkj1P-IMWF6LVBoeE5tVFE

任意のヒント/アイデアは非常に非常に高く評価されています! :)

+0

2011年の第1行Individual 1を見ると、 最初の0は、元のデータフレームの$ X2011Int変数の値になります。 2番目の0(T-1)は、元のデータフレームの値$ X2010Intに相当します。 同様に、$ T-2の値は$ X2009の値に対応します。 – Recon93

+0

TOY2(Googleドライブ、GitHubなど)へのリンクを教えてもらえますか?それは何か? –

+0

ありがとうございます。 OK私は今私の答えを更新しようとしています。 –

答えて

3

ありがとうございました。 OK

Individual Year X2009Int X2010Int X2011Int 
1  2011 10.36703 18.07049 4789.338 
2  2011 10.36703 18.07049 4789.338 
3  2010 10.36703 18.07049 4789.338 
4  2010 10.36703 18.07049 4789.338 
5  2009 10.36703 18.07049 4789.338 
6  2009 10.36703 18.07049 4789.338 

d <- read.table(con <- file("clipboard"), header = T) 

d1 <- data.frame(
    Individual = d$Individual, 
    Year  = d$Year, 
    T   = 0, 
    "T-1"  = 0, 
    "T-2"  = 0 
) 


# First let's rename the columns of the original data set to make it easier to use 
nms <- colnames(d[,3:ncol(d)]) 
nms <- gsub("X", "", nms) 
nms <- gsub("Int", "", nms) 
nms <- c(colnames(d)[1:2],nms) 

colnames(d) <- nms 

# Now, let's populate the new data.frame 
for(i in unique(d1$Year)){ 
    d1$T[d1$Year == i] <- d[d$Year == i,colnames(d) == i] 
    d1$T1[d1$Year == i-1] <- d[d$Year == i-1,colnames(d) == i-1] 
    d1$T2[d1$Year == i-2] <- d[d$Year == i-2,colnames(d) == i-2] 

} 
Individual Year   T  T-1  T-2 
1   1 2011 4789.33800  0  0 
2   2 2011 4789.33800  0  0 
3   3 2010 18.07049 18.07049  0 
4   4 2010 18.07049 18.07049  0 
5   5 2009 10.36703 10.36703 10.36703 
6   6 2009 10.36703 10.36703 10.36703 

FOLLOW UP

、そのフォローアップコードで起こっている問題のカップルがあります:私はこれが何をしたいと思います。

  1. クラスは実際に変更されませんでした。 transform文をコメントアウトし、この使用してください:私はあなたがTOY2を使用することを意図どこでIntensityTOYを使用考える

    d1$Year <- as.numeric(d1$Year)

    TOY2$Year <- as.numeric(TOY2$Year)

  2. を。私はIntensityTOYを持っていないと私はあなたの特定のデータに精通していないので、私はわからないんだけど、あなたが変更したいかどうかを確認してください

    nms <- colnames(TOY2[,3:ncol(IntensityTOY)])

`nms <- colnames(TOY2[,3:ncol(TOY2)])` 
  1. #N/Aという年の値があります。それは数値に変換することはできず、問題を引き起こします。ここに解決策があります:

    d1$Year <- gsub("#N/A","", d1$Year)#この前にこれを行います。数値()

    TOY2$Year <- gsub("#N/A","", TOY2$Year)

最後に一つ。あなたのデータ内のNAは、下付き文字の割り当てには問題があります。これを解決するにはいくつかの方法があります。このエラーメッセージが表示された場合は、NAを0に変更したり、NAを省略したり、置き換えたり、除外(!is.na(...))することができます。

+0

このような詳細な答えをありがとう。 私の質問の編集セクションを見ることができれば、目標データの明確な例が得られます。 あなたのコードでは、 'Year'と' T'列を一致させることができます。 'T-1'列と' T-2'列の下にどのように値を貼り付けますか? 私は、この1行ごとに一意のYearを作成し、Yearを繰り返していく必要があると思います。 ありがとう! – Recon93

+1

私は、わかりやすくするために編集しました。乾杯:) – Recon93

+1

@ Recon93私は今理解していると思う。私は自分の答えを完全に書き直しました。見てください。 –