我有一个数据帧("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