使用mapply()使用factor()分配值标签

时间:2014-03-21 10:53:25

标签: r mapply

我无法将列表中的值标签分配给数字变量。我有一个包含11个变量的数据集(以list()的形式)。前五个变量各自具有单独的值级别,后六个变量各自使用相同的1-5级别。我为前五个变量中的每一个创建了带有值标签的列表,并为缩放创建了一个列表。现在我想自动将这些列表中的标签分配给我的变量。

我已将十一个变量放在一个列表中,以便能够使用mapply()

这是我当前状态的一个例子:

# Example variables:
a <- c(1,2,3,4) # individual variable a
b <- c(1,2,2,1) # individual variable b
c <- c(1,2,3,4,5) # variable c using the scale
d <- c(1,2,3,4,5) # variable d also using the scale


mydata <- list(a,b,c,d)

# Example value labels:
lab.a <- c("These", "are", "value", "labels")
lab.b <- c("some", "more")
lab.c <- c("And", "those", "for", "the", "scale")

labels.abc <- list(lab.a, lab.b, lab.c)

# Assigning labels in two parts
part.a <- mapply(function(x,y) factor(as.numeric(x), labels = y, exclude = NA), mydata[1:2], labels.abc[1:2])
part.b <- mapply(function(x,y) factor(as.numeric(x), labels = y, exclude = NA), mydata[3:4], labels.abc[3])

除了无法将两部分组合在一起外,我的主要问题是输出格式。 mapply()以矩阵的形式给出结果,我需要再次包含特定变量的列表。

所以,我的问题是:如何在自动程序中分配值标签,结果再次得到变量列表,现在包含标记信息而不是数字?

我在这里很迷茫。我的mapply()方法通常是可行的,还是我完全走错了路?

提前致谢!如果您需要更多信息,请发表评论。

1 个答案:

答案 0 :(得分:0)

问题解决了!

感谢@agstudy指出SIMPLIFY = FALSE参数,该参数阻止mapply()将结果减少为矩阵。

正确的代码是

part.a <- mapply(function(x,y) factor(as.numeric(x), labels = y, exclude = NA), mydata[1:2], labels.abc[1:2], SIMPLIFY = FALSE)

这提供了完全相同的输出格式。