我有一个具有不同行数(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)),]
答案 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)
}