vectorN = c("Hello","How","are","you","you","are","Hello")
factorVectorN = factor(vectorN)
#Value of levels(factorVectorN) is c("are", "Hello", "How", "you")
all(levels(factorVectorN)[factorVectorN] == vectorN) # returns TRUE
请您解释一下,上面示例级别(factorVectorN)[factorVectorN] 如何创建与vectorN相同的向量?
答案 0 :(得分:1)
levels(factorVectorN)
是"字符"的原型向量。长度为3
class(levels(factorVectorN))
## [1] "character"
length(levels(factorVectorN))
## [1] 3
这意味着它有3个条目,您可以使用[]
索引它们。
当您运行levels(factorVectorN)[factorVectorN]
时,您基本上告诉R从levels(factorVectorN)
中提取与名为factorVectorN
现在,factorVectorN
包含以下索引1 2 1 2 3 2
。因此R将首先输入factorVectorN
,然后是第二个输入,然后是第一个输入,然后是第二个,依此类推。哪个会返回1 2 1 2 3 2
,因为这些是levels(factorVectorN)
对应于指定索引向量的值
答案 1 :(得分:1)
这只是基本的子集。来自help("[")
:
允许按因子编制索引,相当于按索引编制索引 数字代码(见因子)而不是字符值 印刷
您已经显示了因子水平。在内部,因子只是一个整数向量,其中每个数字(从1开始)对应于因子级别:
str(factorVectorN)
#Factor w/ 4 levels "are","Hello",..: 2 3 1 4 4 1 2
as.integer(factorVectorN)
#[1] 2 3 1 4 4 1 2
因此,如果使用这些数字对级别进行子集化,则会得到一个与原始因子具有相同值的字符向量:
str(levels(factorVectorN)[factorVectorN])
#chr [1:7] "Hello" "How" "are" "you" "you" "are" "Hello"
如果您使用==
将原始因子与字符向量进行比较,您的因素也会被强制转换为字符。