设置数据框中多列的因子级别的顺序

Lor*_*ein 4 r

我已经将CSV文件中的数据加载到数据框中.每列代表一个调查问题,所有答案都是五点李克特量表,标签为:("无","低","中","高","非常高").

当我最初读入数据时,R正确地将这些值解释为因子,但不知道排序应该是什么.我想指定值的排序,以便我可以进行一些数值计算.我认为以下代码可行:

X <- read.csv('..')
likerts <- data.frame(apply(X, 2, function(X){factor(X, 
             levels = c("None", "Low", "Medium", "High", "Very High"), 
             ordered = T)}))
Run Code Online (Sandbox Code Playgroud)

相反,所有级别数据都转换为字符串.我该怎么做呢?

Jor*_*eys 8

使用时data.frame,R将再次转换为正常因子(或者如果stringsAsFactors = FALSE是字符串).请as.data.frame改用.玩具数据框的一个简单例子:

X <- data.frame(
  var1=rep(letters[1:5],3),
  var2=rep(letters[1:5],each=3)

)
likerts <- as.data.frame(lapply(X, function(X){ordered(X,
              levels = letters[5:1],labels=letters[5:1])}))

> str(likerts)
'data.frame':   15 obs. of  2 variables:
 $ var1: Ord.factor w/ 5 levels "e"<"d"<"c"<"b"<..: 5 4 3 2 1 5 4 3 2 1 ...
 $ var2: Ord.factor w/ 5 levels "e"<"d"<"c"<"b"<..: 5 5 5 4 4 4 3 3 3 2 ...
Run Code Online (Sandbox Code Playgroud)

在旁注中,ordered()为您提供有序因子,并且lapply(X,...)apply(X,2,...)数据帧更优化.