将值分配给不正确的列和/或多列时改变 %>% case_

问题描述 投票:0回答:1

我继承了一个远远超出我技能范围的脚本,而创建它的人已经不在了。我注意到脚本中有一个问题似乎很容易修复(或者我是这么认为的)。我正在比较“CHKR”和所有其他非“CHKR”的人之间的树木测量值。换句话说,每棵树都有 CHKR 和其他人的测量值。这些测量结果根据直径、高度等进行分类。

我想将 CRU!=CHKR 处的所有测量值置于与 CHKR 相同的类别中。黄色单元格表示问题或需要注意的事项。例如,STDPLT 23120656_400 TREE1、CRU=DUH 的 DBH 值落在 DBH_temp1 中,而 CHKR 的值落在 DBHC_temp1 中。我想根据 CHKR 值改变要填充的 DBHA、DBHB、DBHC 值。

我遇到的第二个问题是,当 CRU!= CHKR 时,我将值输入到多个列中。当 CRU==CHKR

时我得到正确的值

enter image description here

这是我想要的样子: enter image description here

我尝试了无数种case_when和ifelse的尝试。

这是我能得到的最接近的。问题出在 CRU!=CHKR 时。我正在改变几列并将值放置在错误的列中。

ctre=ctre %>%
  group_by(STDPLT,TREE)%>%
  mutate(
    DBHA= case_when(
      CRU=="CHKR" & DBHA_temp1 == DBH ~ DBHA_temp1,
      CRU!="CHKR" ~ ifelse(DBHB_temp1 == DBH|DBHC_temp1 == DBH , DBH, NA)
    ),
    DBHB= case_when(
      CRU=="CHKR" & DBHB_temp1 == DBH ~ DBHB_temp1,
      CRU!="CHKR" ~ ifelse(DBHA_temp1 == DBH | DBHC_temp1 == DBH, DBH, NA)
    ),
    DBHC= case_when(
      CRU=="CHKR" & DBHC_temp1 == DBH ~ DBHC_temp1,
      CRU!="CHKR" ~ ifelse(DBHA_temp1 == DBH | DBHB_temp1 == DBH, DBH, NA)
    )
  )
if-statement conditional-statements tidyverse case mutate
1个回答
0
投票
ctre=ctre %>%
group_by(STDPLT,TREE)%>% mutate( DBHA= case_when(
  CRU=="CHKR" & DBHA_temp1 == DBH ~ DBHA_temp1,
  CRU!="CHKR" &  DBHA[CRU == "CHKR"]~ DBH,TRUE ~ NA),
DBHB= case_when(
  CRU=="CHKR" & DBHB_temp1 == DBH ~ DBHB_temp1,
  CRU!="CHKR" & DBHB[CRU == "CHKR"] ~ DBH, TRUE ~ NA
),
DBHC= case_when(
  CRU=="CHKR" & DBHC_temp1 == DBH ~ DBHC_temp1,
  CRU!="CHKR" & DBHC[CRU == "CHKR"]~ DBH,TRUE ~ NA))
© www.soinside.com 2019 - 2024. All rights reserved.