【发布时间】:2010-12-02 03:08:43
【问题描述】:
我正在寻找一种优雅的方式来更改 R 中多个向量的数据类型。
我正在使用一个教育数据集:426 名学生对八个多项选择题的回答(1 = 正确,0 = 不正确),以及一个指示哪个讲师 (1, 2, or 3) 教授他们课程的列。
就目前而言,我的数据在data.df 中非常漂亮,如下所示:
str(data.df)
'data.frame': 426 obs. of 9 variables:
$ ques01: int 1 1 1 1 1 1 0 0 0 1 ...
$ ques02: int 0 0 1 1 1 1 1 1 1 1 ...
$ ques03: int 0 0 1 1 0 0 1 1 0 1 ...
$ ques04: int 1 0 1 1 1 1 1 1 1 1 ...
$ ques05: int 0 0 0 0 1 0 0 0 0 0 ...
$ ques06: int 1 0 1 1 0 1 1 1 1 1 ...
$ ques07: int 0 0 1 1 0 1 1 0 0 1 ...
$ ques08: int 0 0 1 1 1 0 1 1 0 1 ...
$ inst : num 1 1 1 1 1 1 1 1 1 1 ...
但那些ques0x 值并不是真正整数。相反,我认为最好让 R 将它们视为实验因素。 “inst”值也是如此。
我很想把所有ints 和nums 变成factors
理想情况下,一个优雅的解决方案应该生成一个数据框——我称之为factorData.df——看起来像这样:
str(factorData.df)
'data.frame': 426 obs. of 9 variables:
$ ques01: Factor w/ 2 levels "0","1": 2 2 2 2 2 2 1 1 1 2 ...
$ ques02: Factor w/ 2 levels "0","1": 1 1 2 2 2 2 2 2 2 2 ...
$ ques03: Factor w/ 2 levels "0","1": 1 1 2 2 1 1 2 2 1 2 ...
$ ques04: Factor w/ 2 levels "0","1": 2 1 2 2 2 2 2 2 2 2 ...
$ ques05: Factor w/ 2 levels "0","1": 1 1 1 1 2 1 1 1 1 1 ...
$ ques06: Factor w/ 2 levels "0","1": 2 1 2 2 1 2 2 2 2 2 ...
$ ques07: Factor w/ 2 levels "0","1": 1 1 2 2 1 2 2 1 1 2 ...
$ ques08: Factor w/ 2 levels "0","1": 1 1 2 2 2 1 2 2 1 2 ...
$ inst : Factor w/ 3 levels "1","2","3": 1 1 1 1 1 1 1 1 1 1 ...
我相当肯定,无论你们想出什么解决方案,它都应该很容易推广到需要重新分类的任意 n 个变量,并且适用于最常见的转换(int -> factor 和num -> int,例如)。
不管你们提出什么解决方案,它必然比我的更优雅
因为我目前的笨拙代码只有 9 个单独的 factor() 语句,每个变量一个,像这样
因子数据.df$ques01
我是 R、编程和 stackoverflow 的新手。请温柔,并提前感谢您的帮助!
【问题讨论】:
-
@briandk:由于问题只能是正确的或不正确的,因此您最好将第 1-8 列转换为逻辑向量而不是因子。 (因素适用于,例如,多选题的答案,其中有超过 2 种可能性。)
-
@Richie:感谢您的建议!我不熟悉向量中的逻辑数据类型。如果它们是像 nums、ints 和 factor 一样的数据类型,那么您的建议是只使用 lapply 将第 1-8 列转换为逻辑因子吗?
标签: r statistics