根据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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...