将标签附加到 R 中数据框的数字代码 - 有效使用因子

Attach Labels to numeric codes of a data frame in R - efficient use of factors

我有一个数据在 excel 中,我读取它以将其存储在名称为 "data" 的数据框中。同样,我将每个变量的值标签及其代码放在单独的 sheet 名称映射中。我也阅读了这个 sheet 并将其存储为名称为 "map" 的数据框。

Link 到文件是 - https://www.wetransfer.com/downloads/bf0c5bfa88be20e4037d7fdc828ca66320161018075428/7f82a4

下面是读取 sheets-

的代码
library("readxl")
data <- read_excel("data_v1.xlsx",sheet = "data")
map <- read_excel("data_v1.xlsx",sheet = "map")

如果您注意到代码数量较少的单元格带有 NA。

现在我想将值标签附加到地图 sheet 到数据的每个代码。我正在搜索,我意识到其中一种方法是使用因子。我们定义级别和标签的地方。我可以使用地图文件中的原始变量名称作为级别和标签,我可以使用带有“_desc”作为后缀的变量名称。

有人可以建议一种有效的方法吗?我的意思是,如果我们可以在循环中执行此操作,而不是为单个变量编写代码?在我附加的数据文件中,这只是一个示例,原始数据文件将包含 100 多个变量,需要为这些变量执行附加标签的任务。

最后,如何附加变量标签?我的意思是,

Q1 应具有标签 "Like the packaging of the brand" Q2 应该有标签 "Like the taste of the brand" Q3 应该有标签 "Like the smell of the brand" Q4 应该有标签 "value for money"

我是否应该考虑创建一个单独的 sheet,其中一列包含变量名称,下一列包含变量标签?我们如何将这些标签附加到变量上,因为我认为因子仅适用于值。

最后,我需要生成 Table / 交叉表,这些标签应该在其中显示。应该显示这些值 + 变量标签的图表。

谢谢!!

普拉萨德

概念上你需要这样的东西

city_labels <- map$City_desc[match(data$City, map$City)]

你从那里去哪里......是一个判断问题。任务的重复性如何?做某些事情会有所不同,你能提前知道它们吗等等。如果你有 100 件事情要做,并且在每种情况下,地图中都有一个相应的变量,名称相同,_desc 作为后缀,那么我会编写一个假设的函数,就像这样:

getLabels <- function(var_name) {
  map[,paste0(var_name, "_desc")][match(data[,var_name], map[,var_name])]
}

getLabels("City")

一旦你解决了我上面评论中的问题,你可以这样做:

new_dat <- data.frame(lapply(names(data), getLabels))
names(new_dat) <- names(data)
new_dat

然后你有了翻译后的数据集 - 将其存储在安全的地方:-)

我会写一个 for 循环来完成这个重复性的任务。需要检查数据和地图中的变量名称是否相同。您的数据不可用,但我觉得下面应该可以。

for (i in names(data)[which(is.element(names(data),names(map)))]){
  data[[i]] <- factor(data[[i]],
                                 levels = na.omit(map[[i]]),
                                 labels = na.omit(map[[paste0(i,"_desc")]]))
}

na.oimt 是省略有 NA 的行。