R 按10筛选数据帧

R 按10筛选数据帧,r,R,但结果不会像上面那样,因为底部过滤器在顶部重复: #遵守10 df[df$col2>10和df$col2 0和df$col2 50和df24$col2filter1 col1 col2 15 160 56.9106 20 160 58.8961 >过滤器2=df24[df24$col2>60&df24$col2过滤器2 col1 col2 18 170 65.6385 >类别(过滤器1) [1] “数据帧” 我建议采用这种方法: filter1=df24[df24$col2>50&a

但结果不会像上面那样,因为底部过滤器在顶部重复:

#遵守10
df[df$col2>10和df$col2 0和df$col2 50和df24$col2filter1
col1 col2
15  160 56.9106
20  160 58.8961
>过滤器2=df24[df24$col2>60&df24$col2过滤器2
col1 col2
18  170 65.6385
>类别(过滤器1)
[1] “数据帧”

我建议采用这种方法:

filter1=df24[df24$col2>50&df24$col2<60,c("col1","col2")]
>filter1
   col1    col2
15  160 56.9106
20  160 58.8961

> filter2=df24[df24$col2>60&df24$col2<70,c("col1","col2")]
> filter2
   col1    col2
18  170 65.6385

> class(filter1)
[1] "data.frame"
#创建索引
索引i&df$col2您可以使用和:

输出:

#Create index
index <- seq(0,max(df$col2),by=10)
index <- rev(index)
#Create list
List <- list()
#Loop
for(i in 1:length(index))
{
  List[[i]] <- df[df$col2> index[i] & df$col2 <index[i]+10, c ("col1", "col2")]
}
library(tidyverse)

df %>% group_split(grp = cut_interval(col2, length = 10, labels = FALSE))
[[1]]
#一个tibble:1 x 3
col1 col2切割玻璃钢
1   170  8.36       1
[[2]]
#一个tibble:10x3
col1 col2切割玻璃钢
1   100  13.5       2
2   100  13.6       2
3   100  10.7       2
4   100  10.9       2
5   100  13.6       2
6   100  15.6       2
7   100  12.0       2
8   100  12.1       2
9   100  12.5       2
10   100  13.6       2
[[3]]
#一个tibble:4x3
col1 col2切割玻璃钢
1   110  23.6       3
2   110  24.0       3
3   110  24.0       3
4 11090  24.2       3
[[4]]
#一个tibble:2x3
col1 col2切割玻璃钢
1   120  30.7       4
2   160  30.0       4
[[5]]
#一个tibble:2x3
col1 col2切割玻璃钢
1   160  56.9       6
2   110  58.9       6
[[6]]
#一个tibble:1 x 3
col1 col2切割玻璃钢
1   120  65.6       7

您可以使用
拆分功能:

[[1]]
# A tibble: 1 x 3
   col1  col2 cut_grp
  <dbl> <dbl>   <int>
1   170  8.36       1

[[2]]
# A tibble: 10 x 3
    col1  col2 cut_grp
   <dbl> <dbl>   <int>
 1   100  13.5       2
 2   100  13.6       2
 3   100  10.7       2
 4   100  10.9       2
 5   100  13.6       2
 6   100  15.6       2
 7   100  12.0       2
 8   100  12.1       2
 9   100  12.5       2
10   100  13.6       2

[[3]]
# A tibble: 4 x 3
   col1  col2 cut_grp
  <dbl> <dbl>   <int>
1   110  23.6       3
2   110  24.0       3
3   110  24.0       3
4 11090  24.2       3

[[4]]
# A tibble: 2 x 3
   col1  col2 cut_grp
  <dbl> <dbl>   <int>
1   120  30.7       4
2   160  30.0       4

[[5]]
# A tibble: 2 x 3
   col1  col2 cut_grp
  <dbl> <dbl>   <int>
1   160  56.9       6
2   110  58.9       6

[[6]]
# A tibble: 1 x 3
   col1  col2 cut_grp
  <dbl> <dbl>   <int>
1   120  65.6       7
如果还需要注意不包含任何数据的范围,则使用
cut
。即:

split(df, findInterval(df$col2, seq(0, max(df$col2), 10)))

$`1`
   col1   col2
17   90 8.3623

$`2`
   col1    col2
1   100 13.4739
2   100 13.5536
3   100 10.7045
5   100 10.9025
6   100 13.5834
7   100 15.6149
9   100 12.0090
10  100 12.1103
11  100 12.5012
14  100 13.5775

......
split(df,cut(df$col2,seq(0,max(df$col2)+10,10)))
....
$`(30,40]`
col1 col2
4   120 30.6985
19  120 30.0437
$`(40,50]`
[1] col1 col2
(或长度为0的行名称)
$`(50,60]`
col1 col2
15  160 56.9106
20  160 58.8961
....

您打算用过滤器实现什么?请发布您的示例输出。您在第1组中有
170,8.36
。这不应该是一个数据帧本身吗?是的,很好,谢谢。现在修复了-这是
cut\u interval()中使用
n
length
参数之间的区别
。非常感谢!
分组(df,grp=cut\u interval(col2,length=10))
是最好的方法this@KmnsE2无论列数多少,它都可以工作。您选择一列的确切含义是什么?
List
[[1]]
   col1    col2
18  170 65.6385

[[2]]
   col1    col2
15  160 56.9106
20  160 58.8961

[[3]]
[1] col1 col2
<0 rows> (or 0-length row.names)

[[4]]
   col1    col2
4   120 30.6985
19  120 30.0437

[[5]]
   col1    col2
8   110 23.5638
12  110 23.9931
13  110 23.9931
16  110 24.1769
21  110 25.2614

[[6]]
   col1    col2
1   100 13.4739
2   100 13.5536
3   100 10.7045
5   100 10.9025
6   100 13.5834
7   100 15.6149
9   100 12.0090
10  100 12.1103
11  100 12.5012
14  100 13.5775

[[7]]
   col1   col2
17   90 8.3623
library(tidyverse)

df %>% group_split(grp = cut_interval(col2, length = 10, labels = FALSE))
[[1]]
# A tibble: 1 x 3
   col1  col2 cut_grp
  <dbl> <dbl>   <int>
1   170  8.36       1

[[2]]
# A tibble: 10 x 3
    col1  col2 cut_grp
   <dbl> <dbl>   <int>
 1   100  13.5       2
 2   100  13.6       2
 3   100  10.7       2
 4   100  10.9       2
 5   100  13.6       2
 6   100  15.6       2
 7   100  12.0       2
 8   100  12.1       2
 9   100  12.5       2
10   100  13.6       2

[[3]]
# A tibble: 4 x 3
   col1  col2 cut_grp
  <dbl> <dbl>   <int>
1   110  23.6       3
2   110  24.0       3
3   110  24.0       3
4 11090  24.2       3

[[4]]
# A tibble: 2 x 3
   col1  col2 cut_grp
  <dbl> <dbl>   <int>
1   120  30.7       4
2   160  30.0       4

[[5]]
# A tibble: 2 x 3
   col1  col2 cut_grp
  <dbl> <dbl>   <int>
1   160  56.9       6
2   110  58.9       6

[[6]]
# A tibble: 1 x 3
   col1  col2 cut_grp
  <dbl> <dbl>   <int>
1   120  65.6       7
split(df, findInterval(df$col2, seq(0, max(df$col2), 10)))

$`1`
   col1   col2
17   90 8.3623

$`2`
   col1    col2
1   100 13.4739
2   100 13.5536
3   100 10.7045
5   100 10.9025
6   100 13.5834
7   100 15.6149
9   100 12.0090
10  100 12.1103
11  100 12.5012
14  100 13.5775

......
 split(df, cut(df$col2, seq(0, max(df$col2) + 10, 10)))
....
$`(30,40]`
   col1    col2
4   120 30.6985
19  120 30.0437

$`(40,50]`
[1] col1 col2
<0 rows> (or 0-length row.names)

$`(50,60]`
   col1    col2
15  160 56.9106
20  160 58.8961
....