使用自定义规则进行分类

发布于 2025-02-14 01:03:03 字数 3011 浏览 1 评论 0原文

在我的示例中,我想使用以下代码:

# Classifiction dataset
library(dplyr)
nest <- c(1,3,4,7,12,13,21,25,26,28)
finder_max <- c(9,50,25,50,25,50,9,9,9,3)
max_TA <- c(7.4,29.4,17.0,33.1,16.2,34.4,4.3,3.52,7.47,1.4)
ds.class <- data.frame(nest,finder_max,max_TA) 
ds.class$ClassType <- ifelse(ds.class$finder_max==3,"Class_1_3",
ifelse(ds.class$finder_max==9,"Class_3_9",
ifelse(ds.class$finder_max==25,"Class_9_25",
ifelse(ds.class$finder_max==50,"Class_25_50","Class_50_51"))))
ds.class
#    nest finder_max max_TA   ClassType
# 1     1          9   7.40   Class_3_9
# 2     3         50  29.40 Class_25_50
# 3     4         25  17.00  Class_9_25
# 4     7         50  33.10 Class_25_50
# 5    12         25  16.20  Class_9_25
# 6    13         50  34.40 Class_25_50
# 7    21          9   4.30   Class_3_9
# 8    25          9   3.52   Class
# 9    26          9   7.47   Class_3_9
# 10   28          3   1.40   Class_1_3


# Custom ordination vector
custom.vec <- c("Class_0_1","Class_1_3","Class_3_9",
    "Class_9_25","Class_25_50","Class_50")


# Original dataset
my.ds <- read.csv("https://raw.githubusercontent.com/Leprechault/trash/main/test_ants.csv")
my.ds$ClassType <- cut(my.ds$AT,breaks=c(-Inf,1,2.9,8.9,24.9,49.9,Inf),
    right=FALSE,labels=c("Class_0_1","Class_1_3","Class_3_9",
    "Class_9_25","Class_25_50","Class_50"))
str(my.ds)
# 'data.frame': 55 obs. of  4 variables:
#  $ days     : int  0 47 76 0 47 76 118 160 193 227 ...
#  $ nest     : int  2 2 2 3 3 3 3 3 3 3 ...
#  $ AT       : num  10.92 22.86 23.24 0.14 0.48 ...
#  $ ClassType: Factor w/ 6 levels "Class_0_1","Class_1_3",..: 4 4 4 1 1 1 1 1 1 1 ...

我想在my.ds中删除使用等于clasStype查找ds.class中的行 nest。我也需要删除课程 在我的自定义订单中,比clasStypecustom.vec)更高。示例:如果我有clasStype class_25_50ds.class中的Nest 3中,我需要使用此clasStype和更高的类删除数据(” class_50“)(如果存在),则适用于文件my.ds

我的新输出必须用于new.my.ds

new.my.ds
#  days nest       AT   ClassType
# 1     0    2  10.9200  Class_9_25
# 2    47    2  22.8600  Class_9_25
# 3    76    2  23.2400  Class_9_25
# 4     0    3   0.1400   Class_0_1
# 5    47    3   0.4800   Class_0_1
# 6    76    3   0.8300   Class_0_1
# 7   118    3   0.8300   Class_0_1
# 8   160    3   0.9400   Class_0_1
# 9   193    3   0.9400   Class_0_1
# 10  227    3   0.9400   Class_0_1
# 11  262    3   0.9400   Class_0_1
# 12  306    3   0.9400   Class_0_1
# 13  355    3  11.9300  Class_9_25
# 14  396    3  12.8100  Class_9_25
# 16    0    4   1.0000   Class_1_3
# 17   76    4   1.5600   Class_1_3
# 18  160    4   2.8800   Class_1_3
# 19  193    4   2.8800   Class_1_3
# 20  227    4   2.8800   Class_1_3
# 21  262    4   2.8800   Class_1_3
# 22  306    4   2.8800   Class_1_3
# 24    0    7  11.7100  Class_9_25
# 25   47    7  24.7900  Class_9_25
#...
# 55  349 1067   0.9600   Class_0_1

请有什么帮助吗?

In my example, I want to use the following code:

# Classifiction dataset
library(dplyr)
nest <- c(1,3,4,7,12,13,21,25,26,28)
finder_max <- c(9,50,25,50,25,50,9,9,9,3)
max_TA <- c(7.4,29.4,17.0,33.1,16.2,34.4,4.3,3.52,7.47,1.4)
ds.class <- data.frame(nest,finder_max,max_TA) 
ds.class$ClassType <- ifelse(ds.class$finder_max==3,"Class_1_3",
ifelse(ds.class$finder_max==9,"Class_3_9",
ifelse(ds.class$finder_max==25,"Class_9_25",
ifelse(ds.class$finder_max==50,"Class_25_50","Class_50_51"))))
ds.class
#    nest finder_max max_TA   ClassType
# 1     1          9   7.40   Class_3_9
# 2     3         50  29.40 Class_25_50
# 3     4         25  17.00  Class_9_25
# 4     7         50  33.10 Class_25_50
# 5    12         25  16.20  Class_9_25
# 6    13         50  34.40 Class_25_50
# 7    21          9   4.30   Class_3_9
# 8    25          9   3.52   Class
# 9    26          9   7.47   Class_3_9
# 10   28          3   1.40   Class_1_3


# Custom ordination vector
custom.vec <- c("Class_0_1","Class_1_3","Class_3_9",
    "Class_9_25","Class_25_50","Class_50")


# Original dataset
my.ds <- read.csv("https://raw.githubusercontent.com/Leprechault/trash/main/test_ants.csv")
my.ds$ClassType <- cut(my.ds$AT,breaks=c(-Inf,1,2.9,8.9,24.9,49.9,Inf),
    right=FALSE,labels=c("Class_0_1","Class_1_3","Class_3_9",
    "Class_9_25","Class_25_50","Class_50"))
str(my.ds)
# 'data.frame': 55 obs. of  4 variables:
#  $ days     : int  0 47 76 0 47 76 118 160 193 227 ...
#  $ nest     : int  2 2 2 3 3 3 3 3 3 3 ...
#  $ AT       : num  10.92 22.86 23.24 0.14 0.48 ...
#  $ ClassType: Factor w/ 6 levels "Class_0_1","Class_1_3",..: 4 4 4 1 1 1 1 1 1 1 ...

I'd like to remove the rows in the my.ds with equal ClassType find in ds.class by nest. I need to remove too, the classes
higher in my custom ordination than ClassType (custom.vec). Example: If I have ClassType Class_25_50 in nest 3 in ds.class, I need to remove the data with this ClassType and higher classes ("Class_50"), if exist, for nest 3 in the file my.ds

My new output must to be for new.my.ds:

new.my.ds
#  days nest       AT   ClassType
# 1     0    2  10.9200  Class_9_25
# 2    47    2  22.8600  Class_9_25
# 3    76    2  23.2400  Class_9_25
# 4     0    3   0.1400   Class_0_1
# 5    47    3   0.4800   Class_0_1
# 6    76    3   0.8300   Class_0_1
# 7   118    3   0.8300   Class_0_1
# 8   160    3   0.9400   Class_0_1
# 9   193    3   0.9400   Class_0_1
# 10  227    3   0.9400   Class_0_1
# 11  262    3   0.9400   Class_0_1
# 12  306    3   0.9400   Class_0_1
# 13  355    3  11.9300  Class_9_25
# 14  396    3  12.8100  Class_9_25
# 16    0    4   1.0000   Class_1_3
# 17   76    4   1.5600   Class_1_3
# 18  160    4   2.8800   Class_1_3
# 19  193    4   2.8800   Class_1_3
# 20  227    4   2.8800   Class_1_3
# 21  262    4   2.8800   Class_1_3
# 22  306    4   2.8800   Class_1_3
# 24    0    7  11.7100  Class_9_25
# 25   47    7  24.7900  Class_9_25
#...
# 55  349 1067   0.9600   Class_0_1

Please, any help with it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文