我有一个数据帧A.我使用for循环从A(A1,A2,A3等)创建了几个子数据帧,根据列CHR的22个级别进行分组。现在我想应用一个自定义函数" diff_set"这22个子数据帧中的每一个都删除了一些不需要的观察。然后我想将输出转换为单个数据帧B并对B中的所有观察执行更多操作。为此,我考虑了混合for循环的一般策略(删除不需要的观察=行)然后使用dplyr的运作。
首先我创建了一个数据框列表:
df_list = list(A1,A2,A3,...,A22)
功能" diff_set"是:
diff_set <- function(x, gap) {
ind <- c(F, diff(x) > gap)
if(sum(ind) == 0) return(x)
x[-unique(c(which(ind), which(ind)-1))]
}
然后我应用&#34; diff_set&#34;到数据框列表:
B = lapply(A, function(i) diff_set(i$POSITION, 200000))
但是,这似乎不起作用。我一定是在做一些愚蠢的错误。
我的一般问题是,对于像这样的问题,使用for循环,dplyr之类的包或两者结合在一起是否更方便。我真的想避免在每个for循环中生成输出对象,需要将其转换为列表作为后续操作的输入。 dplyr直接使用%&gt;%运算符输出对象。例如,我可以使用group_by轻松生成22个子数据帧:
B = A %>% group_by(CHR)
然后我无法使用dlpyr运行diff_set。我尝试使用dplyr :: do,但它似乎无法正常工作:
B = A %>% group_by(CHR) %>%
do(out=data.frame(diff_set(.$POSITION, 200000))) %>% # Here I apply do
group_by(regions=cut(i$POSITION, breaks=seq(0,250000000, by=100000) # example of subsequent operation
# i represents each 22 resulting sub data frames (i = 1-22)
我对如何继续感到非常困惑。任何帮助都将受到高度赞赏。