【问题标题】:using dplyr's recode to recode only some numeric values in a column使用 dplyr 的重新编码仅重新编码列中的一些数值
【发布时间】: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)),但它给出了一个错误:评估错误:必须是双精度类型,而不是整数

标签: r dplyr recode


【解决方案1】:

这就是你要找的吗?如果您将c 更改为双精度,则可以使用双精度(小数)。根据@Axeman 和@Jay 的cmets,它维护变量中的类型。

x %>% mutate(c = a*b) %>% mutate(c = dplyr::recode(as.double(c), `3` = 0.333))

  a b     c
1 1 3 0.333
2 2 2 4.000
3 3 1 0.333

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多