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
....