Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用dplyr';s recode仅对列中的一些数值进行重新编码_R_Dplyr_Recode - Fatal编程技术网

使用dplyr';s recode仅对列中的一些数值进行重新编码

使用dplyr';s recode仅对列中的一些数值进行重新编码,r,dplyr,recode,R,Dplyr,Recode,使用管道重新编码对我来说很重要,所以,请不要提供base 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) %>

使用管道重新编码对我来说很重要,所以,请不要提供base 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
库(车)
图书馆(tidyverse)
x%变异(c=a*b)%>%变异(c=dplyr::recode(c,`3`=300L))#
x%>%mutate(c=a*b)%>%mutate(c=dplyr::recode(c,`3`=0.333))不起作用

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

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

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

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

将最后一位更改为
mutate(c=ifelse(c==3300,c)
@Phil我不能-在现实生活中,我必须重新编码超过1个值,换句话说,我想将3重新编码为某个值,将1重新编码为某个值,但不想将其余值重新编码。
case\u when()
是专门为此设计的。
mutate(c=case\u when(c==3~300,c==1~'something',TRUE~c))
@Axeman我试过:x%>%mutate(c=a*b)%>%mutate(c=case_when(c==3~300,TRUE~c)),但它给出了一个错误:计算错误:必须是double类型,而不是integer将最后一位更改为
mutate(c=ifelse(c==3300,c)
@Phil我不能-在现实生活中,我必须将多个值重新编码,换句话说,我想将3编码为某个值,将1编码为某个值,但不想将其余值重新编码。
case\u when()
是专门为此而设计的。
mutate(c=case\u when(c==3~300,c==1~'something',TRUE~c))
@Axeman我试过:x%>%mutate(c=a*b)>%mutate(c=case_when(c==3~300,TRUE~c)),但它给出了一个错误:求值错误:必须是double类型,而不是integer类型