下面是我拥有的数据集的样本
call
对于structure(list(x = c("P", "P", "P", "P"), y = c("0", "0", "1",
"0"), z = c("0", "0", "0", "CD")), row.names = c(NA, -4L), class = "data.frame")
中存在的P
群组,我需要检查x
是否包含z
,如果确实包含CD
1
中的值。如果是,则将y
替换为CD
所需的输出
X
和CD
永远不会出现在同一行中,并且必须按1
分组
感谢您的帮助。谢谢!
答案 0 :(得分:3)
您可以尝试使用简单的ifelse
语句来检查y
的总和是否大于0(即存在1
)和z
是否为'CD',
library(dplyr)
df %>%
group_by(x) %>%
mutate(z = ifelse(any(y == '1') & z == 'CD', 'x', z))
# A tibble: 4 x 3
# Groups: x [1]
# x y z
# <chr> <dbl> <chr>
#1 P 0 0
#2 P 0 0
#3 P 1 0
#4 P 0 x
答案 1 :(得分:2)
这是base R
的解决方案,其中ifelse()
用于替换
df <- Reduce(rbind,lapply(split(df,df$x),
function(v) within(v,z <- ifelse(any(y==1) & z=="CD","X",z))))
如此
> df
x y z
1 P 0 0
2 P 0 0
3 P 1 0
4 P 0 X