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)
提前致谢.
这是使用该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)
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)