R.使用dplyr在group_by之后应用自定义函数

时间:2017-12-19 17:37:18

标签: r for-loop dataframe group-by dplyr

我有一个数据帧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)

我对如何继续感到非常困惑。任何帮助都将受到高度赞赏。

0 个答案:

没有答案