我有一个像这样的数据框“员工”:
Emp_Id,Name,Dept_Id
20203,Sam,1
20301,Rodd,2
30321,Mike,3
40403,Derik,4
现在我想以 Dept_Id 具有部门名称而不是 Dept_Id 的方式转换此数据框。
为此,我正在尝试使用 dplyr
中的 recode
,因为我的转换逻辑来自 csv,所以我必须使用变量来代替转换逻辑。
我使用 read.csv 获取我的数据框 df
我的逻辑(1=HR,2=IT
等)所在的位置,然后将其放入列表中:
df:
Source,Target,Transformation
Employee,Emp,"1=HR,2=Sales,3=Finance,4=IT"
从df
获取转换登录
myList <- as.character(df[1,3])
现在按照逻辑替换employee中的数据
employee$Dept_Id <- recode(employee$Dept_Id,myList)
在这条线上它给了我:
Error: Argument 2 must be named, not unnamed
最佳答案
有多种方法可以做到这一点。一种方法是:
方法一:
df$Dept_Id <- name[match(df$Dept_Id, names(name))]
Emp_Id Name Dept_Id
1: 20203 Sam HR
2: 20301 Rodd IT
方法二:
df <- df %>%
mutate(Dept_Id_2 = case_when(
Dept_Id == 1 ~ 'HR',
Dept_Id == 2 ~ 'IT'
))
方法三:
codes <- list("1" = "HR", "2" = "IT")
df %>%
mutate(d2 = recode(Dept_Id, !!!codes))
设置
df <- fread("
Emp_Id Name Dept_Id
20203 Sam 1
20301 Rodd 2
")
name <- c("1" = "HR", "2"="IT")
关于在 dplyr 中重新编码给出错误 : Argument 2 must be named, 未命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53995335/