访问因子按其基础整数,而不是R中的级别

访问因子按其基础整数,而不是R中的级别,r,stata,r-factor,R,Stata,R Factor,我经常将长文本作为因素变量(例如,调查中的回答:“我非常同意该陈述”可以是一个级别)。如果我想根据因子变量进行子集划分,那么总是键入完整的级别是很烦人的。我更希望了解从基础整数到级别的映射以及基于此整数的访问 set.seed(1896) df <- data.frame(y = runif(100, 0, 10000), x = factor(rep(c("I strongly agree", "I agree", "I disagree", "I strongly disagree")

我经常将长文本作为因素变量(例如,调查中的回答:“我非常同意该陈述”可以是一个级别)。如果我想根据因子变量进行子集划分,那么总是键入完整的级别是很烦人的。我更希望了解从基础整数到级别的映射以及基于此整数的访问

set.seed(1896)
df <- data.frame(y = runif(100, 0, 10000), x = factor(rep(c("I strongly agree", "I agree", "I disagree", "I strongly disagree"), 25)))
mean(df$y[df$x == "I strongly agree"])
我有两个相关的问题: 1) 有没有更好/更安全的方法?在带有值和值标签的Stata中,可以直接访问标签或值,R中是否存在类似的内容? 2) 有并没有一种方法可以快速查看在R中从整数级映射到因子级的表?给我这样一个表格的命令: 1-“我同意”;2-“我不同意”;3-“我非常同意”;4-“我强烈反对”


提前谢谢

我对你的问题不是很确定,因为我从未使用过Stata。最重要的步骤是分解部分。默认情况下,级别按字母顺序排序

df = data.frame(y = runif(100, 0, 10000), x = rep(c("I strongly agree", "I agree", "I disagree", "I strongly disagree"), 25))

levels(df$x)
[1] "I agree"             "I disagree"          "I strongly agree"   
[4] "I strongly disagree"
为了安全起见,我猜您的意思是为每个数据集定义相同的级别。因此,您可以:

lvls = c("I strongly agree", "I agree", "I disagree", "I strongly disagree")
df$x = factor(df$x,levels=lvl)

levels(df$x)
[1] "I strongly agree"    "I agree"             "I disagree"         
[4] "I strongly disagree"
所以对于table,可能类似于:

data.frame(num = 1:length(lvl),lvl)
  num                 lvl
1  1    I strongly agree
2  2             I agree
3  3          I disagree
4  4 I strongly disagree
并且,您可以使用以下方法创建子集:

df[df$x==lvl[1],]
或:


我不太确定你的问题,因为我从来没有用过Stata。最重要的步骤是分解部分。默认情况下,级别按字母顺序排序

df = data.frame(y = runif(100, 0, 10000), x = rep(c("I strongly agree", "I agree", "I disagree", "I strongly disagree"), 25))

levels(df$x)
[1] "I agree"             "I disagree"          "I strongly agree"   
[4] "I strongly disagree"
为了安全起见,我猜您的意思是为每个数据集定义相同的级别。因此,您可以:

lvls = c("I strongly agree", "I agree", "I disagree", "I strongly disagree")
df$x = factor(df$x,levels=lvl)

levels(df$x)
[1] "I strongly agree"    "I agree"             "I disagree"         
[4] "I strongly disagree"
所以对于table,可能类似于:

data.frame(num = 1:length(lvl),lvl)
  num                 lvl
1  1    I strongly agree
2  2             I agree
3  3          I disagree
4  4 I strongly disagree
并且,您可以使用以下方法创建子集:

df[df$x==lvl[1],]
或:


对于(2)仅仅:
levels(df$x)
?…或者作为一个更“表”式的输出:
data.frame(levels(df$x))
对于(2)仅仅:
levels(df$x)
?…或者作为一个更“表”式的输出:
data.frame(levels(df$x))