【发布时间】:2019-01-27 04:07:04
【问题描述】:
我在 R 中有一个如下所示的数据框:
a b c condition
1 4 2 acap
2 3 1 acap
2 4 3 acap
5 6 8 ncap
5 7 6 ncap
8 7 6 ncap
我正在尝试重新编码 a、b 和 c 列中条件 ncap 的值(以及此处未显示的其他 2 个条件),同时单独保留 acap 的值。
以下代码在应用于前 3 列时有效。我试图弄清楚如何将其仅应用于我按条件指定的行,同时将所有内容保存在同一个数据框中。
df = df %>%
mutate_at(vars(a:c), function(x)
case_when x == 5 ~ 1, x == 6 ~ 2, x == 7 ~ 3, x == 8 ~ 4)
这是预期的输出。
a b c condition
1 4 2 acap
2 3 1 acap
2 4 3 acap
1 2 4 ncap
1 3 2 ncap
4 3 2 ncap
我四处寻找这个问题的答案,但找不到。如果有人知道已经存在的答案,我将不胜感激。
【问题讨论】:
-
尝试在
row_number()上使用ifelse你能显示预期的输出吗? -
管道中的哪个位置?我尝试使用 ifelse 函数,但不知道该放在哪里。为什么在 row_number() 上而不是使用“条件”列的特定值?
-
也可以是
df %>% mutate_at(vars(a:c), funs(case_when(row_number() %in% 4:6 ~ . - 4L, TRUE ~ .))) -
这部分是什么意思:4:6 ~ . - 4L,真的~。我知道 4:6 是行号,但我对其余部分感到困惑。
-
如果我查看该模式,您将通过将 4:6 行的值与 4 的差来替换值。即 5-4 = 1、6-4 =2、7 -4 =3 和 8-4=4
标签: r if-statement dplyr conditional-statements tidyverse