如何解决根据R中的其他列插入类别的列
我的数据框当前如下所示:
Tree Cookie Age
C1T1 A 10
C1T1 A 20
C1T1 A 30
C1T1 B 15
C1T1 B 20
C1T1 B 25
C1T2 A 12
C1T2 A 20
C1T2 B 5
C1T2 B 13
因此,对于每个“树”,我都有几个“ Cookie”,并且对于每个cookie,我具有不同的年龄(基本上代表树的生活的不同部分)。我想添加另一列,以每棵树的最大年龄-最古老的cookie的最老年龄进行分类,在这种情况下,这将是两棵树中cookie A的最后年龄(因此,如果最大年龄小于40岁;如果最大年龄大于40岁且小于120岁,则为“中年”;如果最大年龄大于120岁,则为“中龄”。任何建议对此表示赞赏!
解决方法
好,就这样:
我使用dplyr
库执行此操作,这为我提供了%>%
运算符和summarise()
函数。我还为您的数据框命名为trees
。然后:
library(dplyr)
trees2 <- trees %>%
group_by(Tree = Tree) %>%
summarise(Age = max(Age))
trees2$Cat <- ifelse(trees2$Age < 40,"young",ifelse(trees2$Age > 120,"old","mid-age"))
trees$Category = trees2$Cat[match(trees$Tree,trees2$Tree)]
在此之前,trees2
应该是蜜蜂:
> trees2
# A tibble: 2 x 2
Tree Age
<chr> <chr>
1 C1T1 30
2 C1T2 5
> trees2$Cat <- ifelse(trees2$Age < 40,"mid-age"))
> trees2
# A tibble: 2 x 3
Tree Age Cat
<chr> <chr> <chr>
1 C1T1 30 young
2 C1T2 5 old
之后,使用cory在this post中的建议,最后将小标题放在最后一行的原始表中:
trees$Category = trees2$Cat[match(trees$Tree,trees2$Tree)]
这给了我
> trees
Tree Cookie Age Category
1 C1T1 A 10 young
2 C1T1 A 20 young
3 C1T1 A 30 young
4 C1T1 B 15 young
5 C1T1 B 20 young
6 C1T1 B 25 young
7 C1T2 A 12 old
8 C1T2 A 20 old
9 C1T2 B 5 old
10 C1T2 B 13 old
,
使用cut
的方法:
trees_max <- trees %>%
group_by(Tree) %>%
summarise(max_age = max(Age))
breaks <- c(0,40,120,Inf)
labels <- c("young","mid-age","old")
trees_max$cat <- cut(trees_max$max_age,breaks,labels)
给你
> trees_max
# A tibble: 4 x 3
Tree max_age cat
<chr> <dbl> <fct>
1 C1T1 30 young
2 C1T2 20 young
3 C1T3 35 young
4 C1T4 77 mid-age
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。