Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据r中数值变量的间隔将数据帧拆分为子组_R - Fatal编程技术网

如何根据r中数值变量的间隔将数据帧拆分为子组

如何根据r中数值变量的间隔将数据帧拆分为子组,r,R,我有一个数据帧(df),看起来像: mi chr gen.pos m4774 Ch01 0 m4775 Ch01 1.701 m4663 Ch01 5.519 m4777 Ch01 6.5 m4779 Ch01 11.067 m4780 Ch01 11.234 m3933 Ch01 11.449 m4782 Ch01 13.986 m5534 Ch01 119.277 m5536 Ch

我有一个数据帧(
df
),看起来像:

mi       chr    gen.pos
m4774   Ch01    0
m4775   Ch01    1.701
m4663   Ch01    5.519
m4777   Ch01    6.5
m4779   Ch01    11.067
m4780   Ch01    11.234
m3933   Ch01    11.449
m4782   Ch01    13.986
m5534   Ch01    119.277
m5536   Ch02    0.036
m5550   Ch02    4.26
chr
列作为组,首先,通过此代码获得每组
gen.pos
列的20个箱子的间隔:

len <- as.data.frame(cbind(chr = unique(df$chr), 
  do.call(rbind, tapply(df$gen.pos, df$chr, function(x) {c(min = min(x), max = max(x))}))))
len$interval <- format(round((as.numeric(as.character(len$max))-as.numeric(as.character(len$min)))/20,3),nsmall=3)
我的任务是在
df
中创建一个名为
bin
的列,为每个组的
gen.pos
间隔分配索引。例如,第一个箱子
1
分配给
0~5.964
范围
gen.pos
2
分配给
5.965~11.928
5.964*2=11.928
)。。。 最终结果如下:

mi      chr   gen.pos   bin
m4774   Ch01    0       1
m4775   Ch01    1.701   1
m4663   Ch01    5.519   1
m4777   Ch01    6.5     2
m4779   Ch01    11.067  2
m4780   Ch01    11.234  2
m3933   Ch01    11.449  2
m4782   Ch01    13.986  3
m5534   Ch01    119.277 20
m5536   Ch02    0.036   1
m5550   Ch02    4.26    1

len
数据帧输出是不必要的。它只是用来更清楚地描述我的问题。感谢您的帮助。

len
是一个重要的光标,所以为了清晰起见,我在这里复制了您的内容

library(dplyr)
len <- df %>% 
         group_by(chr) %>%
         summarize(min=min(gen.pos), max=max(gen.pos), interval= (max-min)/20) 

将生成所需的具有awesome dplyr的列。(您可以使用
select
命令删除过时的列)

错误:>len%groupby(chr)%%>%summary(min=min(gen.pos)、max=max(gen.pos)、interval=(max-min)/20)错误:找不到函数“%%>%”安装。软件包(“dplyr”)将dplyr与magrittr一起安装。让我的编码变得有趣。
library(dplyr)
len <- df %>% 
         group_by(chr) %>%
         summarize(min=min(gen.pos), max=max(gen.pos), interval= (max-min)/20) 
df %>% 
  group_by(chr) %>% 
  mutate(max   = max(gen.pos), 
         min   = min(gen.pos), 
         width = (max-min)/20, 
         bin1  = ceiling((gen.pos-min)/width),
         bin   = ifelse(gen.pos==min, bin1 + 1, bin1)
         )