组合的mutate和recode函数失败

时间:2018-08-02 13:48:58

标签: r dplyr

我有一个看起来像这样的数据框(“ 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 = PC等。

到目前为止,这是我的代码:

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”,{{1 }} =“ PC”)。

知道我要去哪里了吗?还有什么方法可以将这两个mutate语句组合成一个,然后将新列写入数据帧?

谢谢

2 个答案:

答案 0 :(得分:1)

您只能在switch中使用基本R mutate语句:

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可以使值与要使用上述=输出的值匹配。

答案 1 :(得分:0)

替代

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