我在R中有一个名为pxlast的数据帧,例如访问我使用pxlast [[5]]的5列。
[1] 259.55 259.55 265.21 269.40 278.23 283.63 288.51 289.84 284.83 280.51 289.76 289.38 294.10 -1.00 -1.00 -1.00
[17] 300.30 303.86 311.65 303.29 296.44 295.13 297.22 294.60 299.65 290.23 295.80 -1.00 -1.00 -1.00 298.56 299.25
[33] 287.37 290.06 281.71 287.66 290.16 280.31 281.51 293.69 292.25 293.73 294.60 291.36 283.81 288.65 288.29 -1.00
[49] -1.00 -1.00 293.25 293.54 277.41 268.08 267.01 270.63 267.25 254.73 266.59 266.73 278.34 282.03 289.63 282.40
[65] 289.59 289.54 291.31 290.85 295.60 290.72 288.25 288.00 293.98 297.11 290.00 278.35 270.61 274.89 267.80 276.32
[81] 279.05 289.07 285.87 293.36 293.18 294.76 295.77 296.35 290.23 297.61 296.93 293.31 290.06 289.98 287.29 282.07
[97] 275.89 270.92 273.68 270.85 280.05 279.64 284.83 288.91 294.85 296.91 297.94 301.66 303.05 298.72 303.46 298.22
[113] 304.92 309.59 316.07 318.05 318.86 318.09 317.84 318.04 337.08 346.89 345.36 350.96 354.65 361.06 354.53 352.63
[129] 352.83 351.45 351.38 361.47 365.13 367.11 371.42 364.37 368.83 372.12 375.10 381.97 384.47 388.67 388.61 386.73
[145] 392.16 388.55 383.86 389.50 379.83 381.37 392.27 387.79 388.61 388.01 394.23 401.78 414.70 421.23 427.77 436.23
[161] 423.86 398.80 419.00 413.60 400.77 416.78 412.58 405.90 404.30 405.65 NA
正如您所看到的,有重复值,例如-1值。
我想返回重复次数超过X次的值和索引,例如重复次数超过3次的值。
这是我的代码。
runs = rle(pxlast[[5]])
pxlast[[5]][runs$lengths > 2]
结果是:
[1] 294.10 299.65 294.60
此结果应该是我向量中的第一个重复元素,因为您可以看到值不正确。
为什么?
我一直在测试并且rle函数正在返回我的运行变量如下。
[1] 2 1 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[59] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[117] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
正如您可以看到值相同的函数组,例如,出现的第一个“2值”意味着2个第一个数字是相同的,也就是说,如果数字是同样的,所以我不能在我的向量上使用它来返回我重复的值,因为它与indixes的总量不匹配。
如果它是以下面的方式,例如25个第一行,我可以使用它。
[1] 2 2 1 1 1 1 1 1 1 1 1 1 1 3 3 3 1 1 1 1 1 1 1 1 1 1 1 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
因为你保留了指数的总和。
有什么想法解决它?
答案 0 :(得分:1)
这是一种可能的方式:
df<-data.frame(lengths=as.numeric(runs$lengths),values=as.numeric(runs$values))
df[df[,"lengths"]>2,]
lengths values
13 3 -1
25 3 -1
43 3 -1
答案 1 :(得分:1)
如果我们需要根据rle
索引
runs <- within.list(rle(pxlast[[5]]), {
i1 <- lengths > 2
values <- values[i1]
lengths <- lengths[i1]})
inverse.rle(runs)
使用可重现的例子
v1 <- c(2, 2, 1, 3, 3, 3, 2, 4, 4, 4, 5)
runs <- within.list(rle(v1), {i1 <- lengths > 2
values <- values[i1]
lengths <- lengths[i1]})
inverse.rle(runs)
#[1] 3 3 3 4 4 4