2017-01-28 5 views
0

私はRには新しく、Rでさまざまなことを試してみたいです。 データフレームを作成しました。forループを使用して選択したい負の値の数この数値をデータフレーム内の新しい列に追加します。私はこれを行う簡単な方法があることを知っていますが、私は実際にRでループのハングアップを取得したい。 あなたの誰かが私のためのアドバイスをしていますか?データフレームを下に掲載します。forループを使用して負の値を数え、新しい列に追加する

NEWFRAME < - data.frame(V1 = runif(500、分= -2、最大= 2)、 V2 = runif(500、分= -2、最大= 2))

おかげで前進!

答えて

0

まず取得データセットの行数と列数:

response = 0; 
for(ir in 1:nr) { // cycle through rows 

    for(ic in 1:nc) { // cycle through columns 
     response = response + ifelse(newframe[ir, ic]<0, 1, 0); 
    } 

} 

response変数は、データセットの負の値の数が含まれています:行とcolums通じ

nr = NROW(newframe); # you can use the lowercase variant as well or the dim command 
nc = NCOL(newframe); 

、その後サイクル。

サイクルは、のために、それぞれの文のように動作し、アカウントにforループの外側を取ることができます:irはコマンド1:nrによって生成されたシリーズの全ての値をとります(つまり12、... nrです) 。

response = 0; 
for(v in unlist(newframe)) { # you need to un-list the dataframe otherwise you would cycle through the columns... 
    response = response + ifelse(v<0, 1, 0); 
} 

別の例では、出力

> a 
b 
c 

これはあなたがループシングルを使用して同じ結果をachiveことができることを意味し得るでしょう

x = c("a", "b", "c"); 
for(v in x) { 
    cat(v, "\n"); 
} 

ですまた、あなたが好きなときはforループからwhileループにいつでも切り替えることができます:

response = 0; 
ir = 1; 
while(ir<=nr) { // cycle through rows 

    ic = 1; 
    while(ic<=nc) { // cycle through columns 
     response = response + ifelse(newframe[ir, ic]<0, 1, 0); 
     ic = ic + 1; 
    } 
    ir = ir + 1; 

} 

私は私はあなたの質問:)

1

に答えている願っていますはい、そこに明確にこれを行うための簡単な方法ですが、私はあなたにループのためのいくつかのアドバイスを提供します。 まずは、追加の列を作成してみましょう:

for (i in 1:length(newframe[,1])) { 

} 

コメント:

nf=data.frame(newframe,neg=rep(NA)) #I called the column "neg" 

第二に、あなたはループの開始と終了になる範囲を定義する必要があり、私は長さを書いた(NEWFRAMEを[1] )を500の代わりに使用します。使用しているオブジェクトにリンクされているものを指定する方が良いでしょう。たとえば、data.frameにさらに行を追加すると、その行が処理され、ループは引き続き機能します。

ループ内で、負の数値のみを使用する場合は、IF条件を使用して取得する必要があります。 (ここではデータフレームの最初の列で作業していますが、for "すべての列で作業するループ)

if(newframe[i,1]<=0){ 
    nf$neg[i]=newframe[i,1] 
    } 

次に、最初の列の解決策があります。私はあなただけで2番目の列をしましょう:)

関連する問題