有条件更新引用其他列

n4c*_*500 4 r vectorization conditional-statements

我正在尝试在R中对某些数据进行条件更新,这些数据的形状与下面给出的相似.

规则是,在类别Z的值== 0的情况下,将其设置为相同类型中的类别X的值.

作为一个R新手,没有很多时间,我最终使用循环,因为我看不到如何使用更新值by(),但我希望有一个更明显的解决方案.

Type    Category    Value
A       X           5
A       Y           2
A       Z           3
B       X           6
B       Y           2
B       Z           0
C       X           7
C       Y           2
C       Z           0
Run Code Online (Sandbox Code Playgroud)

我想要的输出是:

Type    Category    Value
A       X           5
A       Y           2
A       Z           3 <- remains 3
B       X           6
B       Y           2
B       Z           6 <- updated to 6
C       X           7
C       Y           2
C       Z           7 <- updated to 7
Run Code Online (Sandbox Code Playgroud)

提前致谢.

eip*_*i10 5

这是使用该dplyr软件包的解决方案:

library(dplyr)

# Assume your data frame is called "dat"
dat = dat %>% group_by(Type) %>%
  mutate(ValueNew = ifelse(Category=="Z" & Value==0, Value[Category=="X"], Value))

  Type Category Value ValueNew
1    A        X     5        5
2    A        Y     2        2
3    A        Z     3        3
4    B        X     6        6
5    B        Y     2        2
6    B        Z     0        6
7    C        X     7        7
8    C        Y     2        2
9    C        Z     0        7
Run Code Online (Sandbox Code Playgroud)


Met*_*ics 5

library(data.table)
 setDT(mydf)[, value1 := ifelse(Value != 0L & Category == "Z", 
                          Value, Value[Category == "X"]), by = Type]
mydf
#    Type Category Value value1
# 1:    A        X     5      5
# 2:    A        Y     2      2
# 3:    A        Z     3      3
# 4:    B        X     6      6
# 5:    B        Y     2      2
# 6:    B        Z     0      6
# 7:    C        X     7      7
# 8:    C        Y     2      2
# 9:    C        Z     0      7
Run Code Online (Sandbox Code Playgroud)