假设我有以下数据:
df <- data.frame(group = rep(letters[1:2], each = 4),
A = rep(letters[3:4]),
B = letters[1:8])
如果列A等于“c”,我现在想有条件地替换列B中的所有值。我想这样做,第一次出现的地方被替换为“x”,第二次出现的地方被替换为“y”,然后再是“x”,然后再是“y”,依此类推。此外,应在每组中单独进行。
因此,预期输出为:
group A B
1 a c x
2 a d b
3 a c y
4 a d d
5 b c x
6 b d f
7 b c y
8 b d h
我试过了。喜欢
library(tidyverse)
df |> mutate(B = ifelse(A == "c", rep(c("x", "y"), each = 0.5 * sum(A == "c")), B), .by = group)
但这行不通。有什么想法吗
1条答案
按热度按时间bqf10yzr1#
就像这样:
equal_c
计算每个组中'c'的出现情况,然后当A等于'c'时,我们使用它在'x'和'y'之间交替