如何转换树数据的矩阵以识别在R中的两个间隔之间收获的地块?

5ktev3wc  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(77)

我有一个包含树数据的框架(df1),其中每行表示不同年份地块上的一棵树。框架有地块ID(plot)、树ID(tree)、树是否死亡的信息(dead)、树是否被收割(harvest)和相应年份(year)。
我想把这个相框改造成一个新的(df2),它汇总地块级别的信息,指示地块是否在两个指定间隔之间收获。(df2)应包括地块ID列(plot)、间隔的开始年份(year1)、间隔的结束年份(year2)以及地块是否在该间隔内收获的二元指标(harvest)。
我已经提供了示例输入(df1)和预期输出(df2)。有人能帮助我使用R或任何相关的数据操作技术实现这种转换吗?
谢谢你,谢谢

df1 <- structure(list(plot = c("A", "A", "A", "A", "A", "A", "B", "B", 
"B", "B", "B", "C", "C", "C", "C", "C"), tree = c(1L, 1L, 1L, 
2L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L), dead = c(0L, 
0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L), 
    harvest = c(0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 
    0L, 0L, 0L, 1L), year = c(2000L, 2005L, 2010L, 2000L, 2005L, 
    2010L, 2002L, 2004L, 2002L, 2004L, 2006L, 2000L, 2005L, 2010L, 
    2010L, 2015L)), class = "data.frame", row.names = c(NA, -16L
))

字符串
这就是我想结束的:

df2 <- structure(list(plot = c("A", "A", "B", "B", "C", "C", "C"), year1 = c(2000L, 
2005L, 2002L, 2004L, 2000L, 2005L, 2010L), year2 = c(2005L, 2010L, 
2004L, 2006L, 2005L, 2010L, 2015L), harvest = c(0L, 1L, 1L, 1L, 
0L, 0L, 1L)), class = "data.frame", row.names = c(NA, -7L))

bihw5rsg

bihw5rsg1#

不确定这是否是你想要的,因为我不清楚你是否在图树级别进行分析。假设你是,这就是你对dplyr所做的:

library(dplyr) # version: 1.1.4

df2 <- df1 %>%
  # flag if there is a leading harvest or if the row is a harvest
  mutate(flag = if_else(lead(harvest) == 1 | harvest == 1, 1, 0)) %>%
  # bring the leading year to your row
  mutate(year2 = lead(year)) %>%
  # now set the harvest variable accordingly
  mutate(harvest = if_else(flag & lead(flag), 1, 0)) %>%
  # eliminate not needed rows
  filter(year < year2) %>%
  # select your columns
  select(plot, tree, year, year2, harvest)
  # group_by(plot, year, year2) %>%
  # slice(which.max(harvest)) %>% ungroup() %>%
  # select(plot, year, year2, harvest)

字符串
如果您只需要在图级别进行分析,它是一个小的变体。

编辑:最后注解的行是在图级别进行分析时所需的步骤。

相关问题