【发布时间】:2020-10-15 13:44:50
【问题描述】:
我正在寻找一个函数,它遍历数据框中给定列的行(“pos”表示位置,升序),并且只保留那些值至少有 10 个不同的行,从第一个开始row.因此它将从第一行开始(并存储它),然后继续直到找到一个值至少比第一行高 10 的行,存储该行,然后再次从该值开始寻找下一个>10diff 一个。
到目前为止,我有一个 R for 循环,它成功地找到了至少相隔 X 值的相邻行,但它没有能力向下看一行,也没有能力在找到给定行并开始后停止再次从那里。
这是我拥有的功能:
# example data frame
df <- data.frame(x=c(1:1000), pos=sort(sample(1:10000, 1000)))
# prep function (this only checks row above)
library(dplyr)
pos.apart.subset <- function(df, pos.diff) {
# create new dfs to store output
new.df <- list()
new.df1 <- data.frame()
# iterate through each row of df
for (i in 1:nrow(df)) {
# if the value of next row is higher or equal than value or row i+posdiff, keep
# if not ascending, keep
# if first row, keep
if(isTRUE(df$pos[i+1] >= df$pos[i]+pos.diff | df$pos[i+1] < df$pos[i] | i==1 )) {
# add rows that meet conditions to list
new.df[[i]] <- df[i,] }
}
# bind all rows that met conditions
new.df1 <- bind_rows(new.df)
return(new.df1)}
# test run for pos column adjacent values to be at least 10 apart
df1 <- pos.apart.subset(df, 10); head(df1)
很高兴在 awk 或任何其他语言中执行此操作。非常感谢。
【问题讨论】: