我有一个看起来像这样的数据框(“ 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语句组合成一个,然后将新列写入数据帧?
谢谢
答案 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