Итак, у меня есть объект data.frame под названием «ДАННЫЕ». Этот объект содержит один столбец с именем «Точка» (DATA$Point). Поскольку в этом конкретном столбце есть дубликаты, я хотел бы создать функцию, которая выбирает только одну строку среди этих дубликатов в DATA.
Я пытался сделать это следующим образом:
sort.song<-function(DATA){
Point<-levels(DATA$Point)
DATA.NEW<-DATA[1:length(Point),]
#Ideally DATA.NEW should have an empty dataframe with nrow=length(Point) and the same columns
#as in DATA. But I THINK it will work (I don't know how to do the "ideally" way)
for(i in 1:dim(DATA)[1]){ #dim(DATA)[1] always bigger than length(Point)
SUBDATA<-DATA[which(DATA$Point%in%Point[i]),]
#I need to sample one row of the original data set only of the duplicates of the same value.
#So if there isn't a duplicate of one particular value, move on. Otherwise sample one between
#those duplicates.
l<-dim(SUBDATA)[1]
if (l==1){DATA.NEW[i,]<-SUBDATA[l,]}else{lc<-sample(1:l,1)}
DATA.NEW[i,]<-SUBDATA[lc,]
}
return(DATA.NEW)
}
test<-sort.song(DATA)
Но это не работает! :( Я получаю следующее сообщение об ошибке:
Error in `[<-.factor`(`*tmp*`, iseq, value = integer(0)) :
replacement has length zero
Может глупый вопрос, но я тут как бы без вариантов (общий R новичок)
Любая помощь будет высоко оценена!!!!
DATA[!duplicated(DATA$Point), ]
- person waferthin   schedule 15.04.2014