В настоящее время я использую R для преобразования данных из эксперимента в высококачественный набор данных. Одной из особенностей моего кода является обнаружение повторений эксперимента и их маркировка. Я написал следующий код для этого: -Вызов меток из таблицы в R
DAYREP<-function(a){
CAPS<-c("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P",
"Q","R","S","T","U","V","W","X","Y","Z")
if (unique(table(a))==1 && length(unique(table(a)))==1){
return(a)
}
else{
for (i in a){
if (table(a)[[i]]>=2){
CAPS.sum<-CAPS[1:as.vector(table(a)[[i]])-1]
val<-c(i,paste0(i,CAPS.sum))
del<-a[!a %in% i]
vec<-append(del,val,after=i-1)
return(vec)
}
}
}
}
Я использовал следующие векторы чисел дня для тестирования и они подчеркивают каждый возможный результат известен до сих пор.
a<-c(1,2,3,4,5,6,7,8,9)
b<-c(1,2,3,4,5,6,7,8,8)
c<-c(1,2,3,3,4,5,6)
d<-c(1,1,1,1,1,1)
e<-c(1,2,2,3,4,5,6,6,7)
f<-c(2,7,8,10,11,11,14)
Он производит следующий вывод: -
> DAYREP(a)
[1] 1 2 3 4 5 6 7 8 9
> DAYREP(b)
[1] "1" "2" "3" "4" "5" "6" "7" "8" "8A"
> DAYREP(c)
[1] "1" "2" "3" "3A" "4" "5" "6"
> DAYREP(d)
[1] "1" "1A" "1B" "1C" "1D" "1E"
> DAYREP(e)
[1] "1" "2" "2A" "3" "4" "5" "6" "6" "7"
> DAYREP(f)
Error in table(a)[[i]] : subscript out of bounds
Функция работает на всех тестах, но е и е. С e он преобразует только первый набор повторяющихся значений, а с f возвращает сообщение об ошибке.
Я знаю, что проблема вызвана элементом table(a)[[i]]
, вызывающим значение частоты из таблицы, однако я не уверен в том, существует ли метод для вызова значений, которые табулируются из таблицы. Например.
> table(e)
e
1 2 3 4 5 6 7
1 2 1 1 1 2 1
Метод, который я использую, вызывает нижнюю строку, однако я хочу назвать верхнюю строку. Кто-нибудь знает об этом?
Вы смотрели функцию 'make.unique'? – cr1msonB1ade
Я раньше не знаком с этим, но я только что просмотрел его и сделал то, что хотел, чтобы код выше. Благодарю. –
Вы можете использовать 'LETTERS', а не вводить их вручную. –