【发布时间】:2019-02-20 16:14:53
【问题描述】:
我有 df 例如:
outc task prevt
<fct> <fct> <fct>
1 los fre rep
2 los fre swi
3 los ins rep
4 los ins swi
5 win fre rep
6 win fre swi
7 win ins rep
8 win ins swi
我想替换列 task 和 prevt 中的值,具体取决于这些列中的值。例如,如果 task 是 'fre' 而 prevt 是 'rep',那么 task 应该更改为 'ins' 而 prev 应该更改为 'swi'。关键是我需要一次性全部改掉,好像我一个接一个地改,结果就会和我想要的不一样。因此,使用 mutate 和 replace 似乎很容易:
df %>%
mutate(task = replace(task, task == 'fre' & prevt == 'rep', 'ins'),
prevt = replace(prevt, task == 'fre' & prevt == 'rep', 'swi'))
但由于某种原因,在这种情况下,只有 mutate 的第一部分有效,即更改了任务列,但没有更改 prevt 列。
outc task prevt
<fct> <fct> <fct>
1 los ins rep
2 los fre swi
3 los ins rep
4 los ins swi
5 win ins rep
6 win fre swi
7 win ins rep
8 win ins swi
如果我将第二部分更改为某个非条件值(例如 prevt = '1'),那么它可以工作。
df %>%
mutate(task = replace(task, which(task == 'fre' & prevt == 'rep'), 'ins'),
prevt = '1')
outc task prevt
<fct> <fct> <chr>
1 los ins 1
2 los fre 1
3 los ins 1
4 los ins 1
5 win ins 1
6 win fre 1
7 win ins 1
8 win ins 1
因此,由于某种原因,两个替换在 mutate 中不起作用。你能帮我在这种情况下怎么办吗?
【问题讨论】: