【发布时间】:2018-11-30 22:09:28
【问题描述】:
使用管道重新编码对我来说很重要,所以请不要提供基本的 R 解决方案。
同样重要的是:我激活了两个库:car 和 tidyverse。
所以,我有一个数据框 x。我想生成一个新列 c,然后只将其中的 3 的值重新编码为 300。当我想用整数替换时,以下是有效的,但是如果我需要重新编码为浮点数怎么办?
谢谢!
library(car)
library(tidyverse)
x <- data.frame(a = 1:3, b = 3:1)
x %>% mutate(c = a*b) %>% mutate(c = dplyr::recode(c, `3` = 300L)) # Works
x %>% mutate(c = a*b) %>% mutate(c = dplyr::recode(c, `3` = 0.333)) # Doesn't work
【问题讨论】:
-
把最后一位改成
mutate(c = ifelse(c == 3, 300, c) -
@Phil 我不能——在现实生活中我必须重新编码超过 1 个值,换句话说,我想将 3 重新编码为某物,将 1 重新编码为某物,而不是其余的。
-
case_when()是专门为此设计的。 -
mutate(c = case_when(c == 3 ~ 300, c == 1 ~ 'something', TRUE ~c)) -
@Axeman 我试过:x %>% mutate(c = a*b) %>% mutate(c = case_when(c == 3 ~ 300, TRUE ~c)),但它给出了一个错误:评估错误:必须是双精度类型,而不是整数