我可能有一个非常简单的问题,即如果某些条件得到满足,则根据clas我df的变量调用变量.如果不满足条件,不要改变任何东西.
V <- seq(10,50,10)
gr = rep(seq(1,2),each=5)
clas=c("Normal","Abnormal","Fair","Fair","Normal","Fair","Normal","Normal","Abnormal","Fair")
df <- data.frame(V,gr,clas)
# V gr clas
# 1 10 1 Normal
# 2 20 1 Abnormal
# 3 30 1 Fair
# 4 40 1 Fair
# 5 50 1 Normal
# 6 10 2 Fair
# 7 20 2 Normal
# 8 30 2 Normal
# 9 40 2 Abnormal
# 10 50 2 Fair
Run Code Online (Sandbox Code Playgroud)
我想设置clas列所有Normal如果显示的值Normal时, V=20和V=30每个小组.如果这种情况不满意,则无需更改该组.
预期产出
df_modif
# V gr clas
# 1 10 1 Normal
# 2 20 1 Abnormal
# 3 30 1 Fair
# 4 40 1 Fair
# 5 50 1 Normal
# 6 10 2 Normal
# 7 20 2 Normal
# 8 30 2 Normal
# 9 40 2 Normal
# 10 50 2 Normal
Run Code Online (Sandbox Code Playgroud)
基于OP的描述
library(dplyr)
df %>%
group_by(gr) %>%
mutate(clas = as.character(clas),
clas = if(any(clas =="Normal" & V ==20) &
any(clas=="Normal" & V==30)) "Normal"
else clas)
# V gr clas
# (dbl) (int) (chr)
#1 10 1 Normal
#2 20 1 Abnormal
#3 30 1 Fair
#4 40 1 Fair
#5 50 1 Normal
#6 10 2 Normal
#7 20 2 Normal
#8 30 2 Normal
#9 40 2 Normal
#10 50 2 Normal
Run Code Online (Sandbox Code Playgroud)
同样可以实现 data.table
library(data.table)
setDT(df)[df[, .I[any(clas == "Normal" & V == 20) &
any(clas == "Normal" & V ==30)], gr]$V1, clas := factor("Normal")]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |