我正在研究分析调查数据的大型数据集。根据数据,我正在为不同的变量(c1,c2,c3)生成交叉表。我正在编写代码,其中R将自动在xtab中选择“是”值,并在后续分析中给出一个字母。
我的问题从数据框中只有是或没有值开始。当完成交叉制表时,显然只挑出“否”或“是”值。
Df1 <- data.frame(c = 1:4, c1 = c("yes","yes","yes","yes"), c2 = c("yes", "no", "no", "no"), c3 = c("no", "no", "no", "no"), weight = c(1.1, 1.2, 1.4, 0.8))
x<-xtabs(weight~c3,data=Df1)
y<-xtabs(weight~c2,data=Df1)
z<-xtabs(weight~c1,data=Df1)
当我尝试分配一个字母时,交叉标签的输出,显然它只适用于同时具有是和否答案的xtab(b)。
a<-x[2]
b<-y[2]
c<-z[2]
为了解决这个问题,我尝试使用“if”功能,但它仍然有效。因此,如果xtab中有肯定答案,则应始终使用此值,并且只给出no值,然后应分配0。
x1<-as.data.frame(x)
a<-if(x1$c3=="yes") x[2] else 0
y1<-as.data.frame(y)
b<-if(y1$c2=="yes") y[2] else 0
z1<-as.data.frame(z)
c<-if(z1$c1=="yes") z[2] else 0
我应该得到答案a = 0,b = 1.1和c = 0,但到目前为止,但有限的知识并没有让我走得太远。任何帮助将不胜感激。
答案 0 :(得分:2)
每天factor
让医生离开。如果您将数据转换为因子,R机制以跟踪分类数据,您的任务将更加容易。
要将矢量转换为系数,请使用factor
。如果您事先知道要素级别应该是什么,请使用levels
参数指定。
> factor(Df1$c3, levels=c("yes", "no"))
[1] no no no no
Levels: yes no
您可以使用lapply
:
> Df1[, 2:4] <- lapply(Df1[, 2:4], function(x)factor(x, levels=c("yes", "no")))
> str(Df1)
'data.frame': 4 obs. of 5 variables:
$ c : int 1 2 3 4
$ c1 : Factor w/ 2 levels "yes","no": 1 1 1 1
$ c2 : Factor w/ 2 levels "yes","no": 1 2 2 2
$ c3 : Factor w/ 2 levels "yes","no": 2 2 2 2
$ weight: num 1.1 1.2 1.4 0.8
然后您的xtab
将返回包含所有因子级别的交叉表:
> xtabs(weight~c3, data=Df1)
c3
yes no
0.0 4.5
> xtabs(weight~c1, data=Df1)
c1
yes no
4.5 0.0
答案 1 :(得分:0)
您可以使用names属性进行子集化:
> x["yes"]
<NA>
NA
> y["yes"]
yes
1.1
> z["yes"]
yes
4.5
显然,如果没有“是”元素,那么你就得到了NA。
另一种方法是设置数据,以便始终存在两个因子水平:
Df2 <- Df1
Df2[2] <- factor(Df2[[2]],levels=c("no","yes"))
Df2[4] <- factor(Df2[[4]],levels=c("no","yes"))
xtabs(weight~c3,Df2)
c3
no yes
4.5 0.0