【发布时间】:2022-01-22 23:57:52
【问题描述】:
我已经编写了一段代码来重新编码我拥有的一些变量。它看起来像这样:
这是我的示例 df:
mydf <- structure(list(SubjectId = 1:10, EventName = structure(c("Visit 11",
"Visit 7", "Visit 15", "Visit 11", "Visit 7", "Visit 11", "Visit 15",
"Visit 11", "Visit 7", "Visit 7"), label = "Event name", format.sas = "$"),
P1A1_BS1ORRES = structure(c(1, 1, 2, 1, 2, 1, 2, 1, 1, 1), label = "Path1: Result", format.sas = "BSRESA")), row.names = c(NA,
-10L), class = c("tbl_df", "tbl", "data.frame"))
这就是我所做的:
codeList <- list("1" = "AAA",
"2" = "BBB",
"3" = "CCC",
"4" = "DDD",
"5" = "EEE")
col <- 'P1A1_BS1ORRES'
list <- codeList
df <- mydf
df[[col]] <- as.character(df[[col]])
for (k in 1:length(list)){
df[df[[col]] == names(list)[k], col] <- list[[k]]
}
这会将P1A1_BS1ORRES 列中的数字键正确转换为它们各自的标签。但是,当我把它放在一个函数中时,我无法让它工作......这是我所做的:
recodeCol <- function(df, col, list){
df[[col]] <- as.character(df[[col]])
for (k in 1:length(list)){
df[df[[col]] == names(list)[k], col] <- list[[k]]
}
}
recodeCol(mydf, 'P1A1_BS1ORRES', codeList)
它返回NULL 有谁知道为什么当我把它变成一个函数时这不起作用?
【问题讨论】:
-
你没有从你的函数中返回任何东西——把
df放在函数的最后一行,它应该可以工作吗?我还建议不要使用名为list的参数,因为这与内置函数list()冲突 -
天啊,我觉得自己好蠢。感谢您的帮助和提示!