适用不适合与桌子玩

时间:2016-02-26 04:31:53

标签: r

当我使用apply with table function时,我得到了两个不同的结构。

以下是一些示例数据

d1 <- data.frame(q1 = c(1,2,3), q2 = c(3,2,1))
d2 <- data.frame(q1 = c(1,2,3), q2 = c(3,2,2))

d1 <- data.frame(lapply(d1, factor, ordered=TRUE, 
                        levels=c(1,2,3), 
                        labels=c("Dissatisfied",
                                 "Neutral",
                                 "Satisfied"
                        )))

d2 <- data.frame(lapply(d2, factor, ordered=TRUE, 
                        levels=c(1,2,3), 
                        labels=c("Dissatisfied",
                                 "Neutral",
                                 "Satisfied"
                        )))

现在,如果我运行apply函数

apply_1 <- apply(d1,2,table)
apply_2 <- apply(d2,2,table)

apply_1是一个很好的表(这是我期待的输出)

str(apply_1)

但是apply_2是一个列表,而不是我想要的或预期的

str(apply_2)

我猜这是因为其中一个因素不是d2第2列中的值

但是,分别在每列上运行table命令可以得到我想要的内容

table(d2[ , 1])
table(d2[ , 2])

我是否需要将apply函数更改为循环并将所有输出绑定在一起,或者我是否可以通过表函数很好地应用它?

1 个答案:

答案 0 :(得分:2)

在应用函数之前,

applyd1/2强制转换为matrix,这会丢弃您的factor编码。这意味着table结果的d2结果长度不同,导致list被退回。

相反,请尝试:

sapply(d1,table)

#             q1 q2
#Dissatisfied  1  1
#Neutral       1  1
#Satisfied     1  1

sapply(d2,table)

#             q1 q2
#Dissatisfied  1  0
#Neutral       1  2
#Satisfied     1  1