我目前正在使用 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。使用e它只转换第一组重复值,并且用f返回错误信息。
我知道问题是由table(a)[[i]]
元素调用表中的频率值引起的,但是我不确定是否有一种方法来调用从表中列出的值。 E.g。
> table(e)
e
1 2 3 4 5 6 7
1 2 1 1 1 2 1
我正在使用的方法是调用底线,但我希望调用顶线。有人知道解决方案吗?
答案 0 :(得分:0)
@ cr1msonB1ade善意地建议使用make.unique
函数,该函数能够执行上述函数所做的操作,并略有不同。
> make.unique(e)
[1] "1" "2" "2.1" "3" "4" "5" "6" "6.1" "7"
谢谢!
答案 1 :(得分:0)
正如我在评论中所述,我认为你想要的是内置函数make.unique
,但是你也有一些关于如何使用表格的问题,所以我也想解决这些问题。当您想通过变量名称({for循环中的table
)访问i
中的值时,您希望使用单括号[
进行索引而不是双括号{{1 }}。另一个问题是该表将值转换为因子,因此您必须使用[[
进行索引。我不认为这完全修复了你的脚本,但它可能让你足够接近。