2014-09-14 4 views
0

У меня есть кадр данных «чистый», который имеет 2 столбца. Для обработки важна только одна колонка «ID». В этом столбце есть числа, которые повторяются несколько раз. Требуемый вывод - это новый кадр данных с двумя столбцами с уникальным идентификатором, а другой - с количеством раз.Ошибка, предупреждения во время цикла

код работает нормально, но когда я исполню я получаю 50 предупреждающих сообщений следующим образом:

50: In while (clean$ID == x) { ... : 
    the condition has length > 1 and only the first element will be used 

Ниже мой код. Может кто-то помочь понять и устранить эту ошибку?

j <- unique(clean$ID) 
    count=0 
    for (x in j) 
    { 
    while (clean$ID==x) 
     { 
     count<-count+1 
     } 
    result<-append(result,x,count) 
    } 
result 
+0

Может быть, вы можете попробовать 'as.data.frame (table (clean $ ID))' вместо цикла while? – akrun

ответ

1

Во-первых, я исправлю ошибку. Обратите внимание: clean$ID - это вектор, такой как 1:5, и вы сравниваете его с одним значением, например 3, когда вы делаете 1:5==3, вы получаете вектор логических значений. Поэтому, когда вы говорите while(1:5==3), что вы имеете в виду? Вы хотите, чтобы значения any были истинными, или вы хотите повторить пока значения all верны? Предупреждение указывает, что оценка выполняется только на основании первого значения, которое эквивалентно (1:5)[1]==3

Но, как отметил @arkun, вы плохой стратегией для достижения своей цели.

as.data.frame(table(clean$ID)) 

было бы намного лучшим выбором для получения данных с кадрами каждого значения идентификатора.

Смежные вопросы