2017-03-15 3 views
0

私のデータフレームは、A_NUMBER, B_NUMBER, DURATIONの列で構成されています。 A_NUMBERが別の番号B_NUMBERに何回電話をかけたのかを数えたいと思います。一意の値のみをカウントするループ

Iが最初次に0

df$CFU <- rep (0,nrow(df)) 

に等しく設定されたすべての値を持つ新しい列を作成し、Iはループについては、以下を試してみました:

for (j in 1:nrow(df)){ for (i in 1:nrow(unique(df$B_NUMBER))){ 
    if(df$A_NUMBER[i] == df$A_NUMBER[j]) {df$CFU[j] <- sum(df$CFU[j],1) }}} 

は、その後、私は次のエラーを取得する:

'error in 1:nrow(unique(df$B_NUMBER)): argument of length 0.

どうすれば解決できますか?

+2

再現可能な例を教えてください。 [ask]と[mcve]を読んで質問を編集してください:http://stackoverflow.com/posts/42806592/edit – jogo

+0

ベクトルの行数を求めるのでエラーが発生します(nrow(unique (df $ B_NUMBER))しかし、これとは別に、私はあなたが達成しようとしていることを理解していません。逆インデックスをお探しですか? – Adam

答えて

0

に単純化することができます。

A_NUMBER = round(runif(100,0,10)) 
B_NUMBER = round(runif(100,0,10)) 
df = cbind(A_NUMBER, B_NUMBER) 
aggregate(B_NUMBER ~ A_NUMBER, data=df, unique) 

    A_NUMBER     B_NUMBER 
1   0      10, 8 
2   1   9, 3, 1, 7, 8, 0 
3   2  7, 0, 6, 1, 9, 2, 10 
4   3   7, 3, 6, 8, 4, 5 
5   4 7, 9, 3, 10, 4, 8, 1, 2, 5 
6   5     6, 5, 2, 8 
7   6   4, 8, 9, 6, 10, 3 
8   7  7, 3, 6, 0, 4, 1, 9, 8 
9   8    7, 9, 8, 5, 2 
10  9  8, 6, 2, 9, 0, 4, 1 
11  10       7 

、その後、あなたは

aggregate(B_NUMBER ~ A_NUMBER, data=df, function(x) length(unique(x)) 

    A_NUMBER B_NUMBER 
1   0  2 
2   1  6 
3   2  7 
4   3  6 
5   4  9 
6   5  4 
7   6  6 
8   7  8 
9   8  5 
10  9  7 
11  10  1 

としてのベクトルの長さを呼び出し、それが

subset(df,A_NUMBER == 8) 

     A_NUMBER B_NUMBER 
[1,]  8  7 
[2,]  8  9 
[3,]  8  7 
[4,]  8  8 
[5,]  8  5 
[6,]  8  7 
[7,]  8  2 
[8,]  8  2 
[9,]  8  8 

良い、唯一の7S、9S、8S、5Sを見えることで正しかったかどうかを確認することができます2s!

0

サンプルデータを提供していないため、forループで何が起こったかをさらに調べることは困難です。しかし、エラーメッセージに基づいて、それは明らかに1:nrow(unique(df$B_NUMBER))が動作していません。 unique関数は、vectorを返します。これは1次元です。このvectorを入力としてnrowに入力すると、NULLが返されます。この場合、必要なものがlengthでなく、nrowである可能性があります。

ところで、df$CFU <- rep(0, nrow(df))は、私はあなたの質問を理解方法は、あなたが探していることは、各A_NUMBERのためのユニークなB_NUMBERsのリストであるということであるdf$CFU <- 0

関連する問題