当我使用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函数更改为循环并将所有输出绑定在一起,或者我是否可以通过表函数很好地应用它?
答案 0 :(得分:2)
apply
将d1/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