我有一个16列数据框的子集。它们都是因素,具有相同的级别和标签。我正尝试使用apply()
函数之一来一次性分配关卡和标签,但我的功能是打印结果而不是将它们分配给数据框。我可以把它们全部写出来 - 只有16个 - 但后来我有更多的变量组来制作因素,这样可以为我节省很多工作。apply()不分配值
实施例的数据:
df <- structure(list(col1 = c(0L, 1L, 1L, 0L, 1L, 1L, -1L, 0L, 0L,
1L), col2 = c(0L, 0L, -1L, 0L, -1L, -1L, 1L, 0L, 0L, 1L), col3 = c(-1L,
1L, 1L, -1L, 0L, 1L, 0L, 0L, -1L, -1L), col4 = c(0L, 0L, 0L,
1L, 1L, 0L, 0L, 1L, 1L, 0L), col5 = c(-1L, -1L, 0L, 1L, 0L, 0L,
1L, -1L, 0L, 1L)), .Names = c("col1", "col2", "col3", "col4",
"col5"), row.names = c(NA, -10L), class = "data.frame")
有了这个数据我试着:
levels <- -1:1
labels <- c("Don't know", "Not mentioned", "Mentioned")
lapply(as.list(1:5), function(x){
df[, x] <<- factor(df[, x], levels = levels, labels = labels)
})
这将打印的每个变量,而不是将其分配给原始数据帧,并且也正确地使所有的细胞NA
。显然我做错了什么,但我看不出什么(也许我没有足够的咖啡)。
我的问题是:如何将水平和标签同时分配给多个变量,可能需要使用xapply()
函数。
我见过this post on R Bloggers所以使用了<<-
代替<-
但无济于事,我也试着assign()
没有运气,无论是。
谢谢。
当我运行代码,我得到包含值“一个数据帧不知道“,”未提及“,”已提及“。这不是你想要达到的目标吗?原始'df'中的值将被3个字符串值覆盖。 –
从函数内部修改全局环境正在寻求麻烦。您可以改为使用'df [] < - lapply(df,factor,levels = levels,labels = labels)'。 –
感谢您的关注。我提供的可重复的例子是使用你的建议,而我的实际数据不是。我将着眼于此,也许修改我的示例数据或尝试找出为什么我的实际数据不起作用。理想情况下,我是在追求因素。 – Phil