r-组合突变和重新编码功能失败



我有一个数据帧("tidydataset"(,看起来像这样:

Block        Group_code   avg    count
1            Q.DB1_01     1.53   456   
1            Q.DB1_02     1.63   456   
1            Q.DB1_03     1.29   456    
1            Q.DB2_01     2.11   456    
1            Q.DB2_02     1.43   456    
1            Q.DB2_03     1.61   456    

我正在尝试创建一个新的变量,它采用"Group_code"的第5个字符,然后根据以下级别对其进行重新编码:1=电话,2=平板电脑,3=电脑,等等。

这是我迄今为止的代码:

tidydataset %>%
mutate(Group_name = as.numeric(substr(Group_code, start=5, stop=5))) %>%
mutate(Group_name = recode(Group_name, `1` = "Phone", `2` = "Tablet", `3` = 
"PC"))

这会弹出一条错误消息:"mutate_impl(.data,dots(中出错:评估错误:未使用的参数(1="Phone",2="Tablet",3="PC"(。

知道我哪里错了吗?那么,有没有办法将这两个mutate语句合并为一个,并将新列写入数据帧?

感谢

您只需在mutate:中使用基本的Rswitch语句

library(dplyr)
tidydataset %>%
rowwise() %>%
mutate(Group_name = switch(substr(Group_code, start=5, stop=5),
'1' = "Phone",
'2' = "Tablet",
'3' = "PC"
))
Source: local data frame [6 x 5]
Groups: <by row>
# A tibble: 6 x 5
Block Group_code   avg count Group_name
<int> <chr>      <dbl> <int> <chr>     
1     1 Q.DB1_01    1.53   456 Phone     
2     1 Q.DB1_02    1.63   456 Phone     
3     1 Q.DB1_03    1.29   456 Phone     
4     1 Q.DB2_01    2.11   456 Tablet    
5     1 Q.DB2_02    1.43   456 Tablet    
6     1 Q.DB2_03    1.61   456 Tablet    

您希望删除as.numeric,因为通过将Group_code保留为character,您可以如上所述使用=匹配要输出的值。

替代

Group_name = as.numeric(substr(Group_code, start=5, stop=5))
Group_name[Group_name==1] = "Phone"
Group_name[Group_name==2] = "Tablet"
Group_name[Group_name==3] = "PC"
cbind(tidydataset, Group_name)
#  Block Group_code  avg count Group_name
#1     1   Q.DB1_01 1.53   456      Phone
#2     1   Q.DB1_02 1.63   456      Phone
#3     1   Q.DB1_03 1.29   456      Phone
#4     1   Q.DB2_01 2.11   456     Tablet
#5     1   Q.DB2_02 1.43   456     Tablet
#6     1   Q.DB2_03 1.61   456     Tablet

最新更新