r - 将因子水平应用于缺少因子水平的多个列

标签 r multiple-columns lapply

我有一个包含许多因素的数据框,想要创建统计表来显示每个因素的分布,包括观察值为零的因素水平。例如,这些数据:

structure(list(engag11 = structure(c(5L, 4L, 4L), .Label = c("Strongly Disagree", "Disagree", "Neither A or D", "Agree", "Strongly Agree"), class = "factor"), encor11 = structure(c(1L, 1L, 1L), .Label = c("Agree", "Neither Agree or Disagree", "Strongly Agree"), class = "factor"), know11 = structure(c(3L, 
1L, 1L), .Label = c("Agree", "Neither Agree or Disagree", "Strongly Agree"), class = "factor")), .Names = c("engag11", "encor11", "know11"), row.names = c(NA, 3L), class = "data.frame")

显示 6 行,但每列仅观察到部分因子水平。当我生成表格时,我不仅想显示观察到的级别的计数,还想显示未观察到的级别的计数(例如“强烈不同意”)。像这样:

# define the factor and levels
library(dplyr);library(pander);library(forcats)
eLevels<-factor(c(1,2,3,4,5), levels=1:5, labels=c("Strongly    Disagree","Disagree","Neither A or D","Agree","Strongly Agree"),ordered =TRUE )

# apply the factor to one variable
csc2$engag11<-factor(csc2$engag11,eLevels)

t1<-table(csc2$engag11)
pander(t1)

这会产生一个频率表,显示每个级别的计数,包括未报告/观察到的级别的零。

但是我有几十个变量需要转换。 Stackoverflow 上推荐的一个简单的 lapply 函数似乎不起作用,例如这个:

csc2[1:3]<-lapply(csc[1:3],eLevels)

我还为此尝试了一个简单的函数(n=列列表),但失败了:

facConv<-function(df,n)
{   df$n<-factor(c(1,2,3,4,5), levels=1:5, labels=c("Strongly 
Disagree","Disagree","Neither A or D","Agree","Strongly Agree") )
return(result)   }

有人可以提供解决方案吗?

最佳答案

lapply 应该可以正常工作,您只需要指定 factor() 函数即可:

csc2[1:3] <- lapply(csc2[1:3], function(x) factor(x, eLevels))

然后你可以像这样调用表:

table(csc2[1])

#Strongly    Disagree             Disagree       Neither A or D                Agree       Strongly Agree 
#                   0                    0                    0                    2                    1 
table(csc2[2])

#Strongly    Disagree             Disagree       Neither A or D                Agree       Strongly Agree 
#                   0                    0                    0                    3                    0 

关于r - 将因子水平应用于缺少因子水平的多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48196217/

相关文章:

r - 当用于 BiomaRt 查询时,lapply 比 for-loop 慢。这是预期的吗?

r - 使用 dplyr 获取零方差的列名

R将列表列表转换为以列表编号作为列的数据框

r - 如何合并 R 中嵌套文件夹中的 csv 文件

python - Pandas Dataframe 合并多键

html - 3 列响应式页脚

r - r中的时变网络

将数据框中的某些值替换为 NA

jquery - 保持相同的列高度与 onclick 事件改变被点击的容器高度

r - 在 R 中创建相似对角 block 矩阵的列表