提取从数据框中均匀分布的数据 - R.

时间:2017-09-05 07:29:17

标签: r dataframe

我有一个具有不同行数(numElement)的data.frame(df),我希望从中提取在df中均匀分布的X个元素(numExtract),并将它们存储在新的数据帧(extractData)中。当我使用下面的脚本时,有时候我会在extractData中获得不同数量的元素(从numExtract中加一个)。我该如何解决?

脚本:

numElement<-400
df<-data.frame(seq(1:numElement))

numExtract<-5
extractData <- df[seq(1, nrow(df), by = round(nrow(df)/numExtract)),]


numElement<-400
df<-data.frame(seq(1:numElement))

numExtract<-7

extractData <- df[seq(1, nrow(df), by = round(nrow(df)/numExtract)),]

2 个答案:

答案 0 :(得分:1)

我无法评论,但round没有额外的参数将数字四舍五入到最接近的整数。

在第一种情况下,你想要每个第80个元素,然后在第二个案例中每个第57个元素,这意味着你将获得索引为1 58 115 172 229 286 343 400的元素(这里总共8个索引)。

答案 1 :(得分:0)

自定义功能

使用Python获取更直观的间隔,并提取中断。它使用cut进行子串提取

gsubfn:strapply

<强>输出

library(gsubfn)
myfun <- function(maxval, numbreaks) {
              require(gsubfn)
              x <- unique(cut(1:maxval, numbreaks-1))
              A <- sapply(x, function(Z) round(as.numeric(strapply(as.character(Z), "^[(](\\S+)[,]", perl=TRUE))))
              A <- c(A, maxval)
              return(A)
         }