假设我有一个data.frame df:
df <- data.frame(
A = 1:8,
B = rep(letters[1:4], each = 2),
C = rep(1:2, 4)
)
A B C
1 1 a 1
2 2 a 2
3 3 b 1
4 4 b 2
5 5 c 1
6 6 c 2
7 7 d 1
8 8 d 2
Run Code Online (Sandbox Code Playgroud)
我想交换列中的值B,当它们是b或时c,而不是它们是什么时候,a或者d以另一列为条件C,即何时C = 1.所以目标data.frame是df1:
df1 <- data.frame(
A = 1:8,
B = c("a", "a", "c", "b", "b", "c", "d", "c"),
C = rep(1:2, 4)
)
A B C
1 1 a 1
2 2 a 2
3 3 c 1
4 4 b 2
5 5 b 1
6 6 c 2
7 7 d 1
8 8 c 2
Run Code Online (Sandbox Code Playgroud)
你可以试试chartr,
chartr('bc', 'cb', df$B)
#[1] "a" "a" "c" "c" "b" "b" "d" "d"
Run Code Online (Sandbox Code Playgroud)
为了调整它C == 1,
df$B[df$C == 1] <- chartr('bc', 'cb', df$B[df$C == 1])
Run Code Online (Sandbox Code Playgroud)