我有一些数据想要提取整数出现的频率。这是一些示例数据:
df <- read.table(header=T, text="A B C D
1 1 5 3 1
2 1 2 3 2
3 2 3 5 3
4 1 4 5 3
5 3 1 4 2
6 5 2 5 1
")
df
我可以循环这些并获得计数,如下所示:
for (i in 1:5){
print(colSums(df==i))
}
但每次我尝试存储输出时都会收到错误。将结果输出存储在数据框中的最简洁方法是什么?我想我对存储循环运行的数据的方式感到困惑。感谢您的帮助。
我们可以用mtabulate
library(qdapTools)
t(mtabulate(df))
# A B C D
#1 3 1 0 2
#2 1 2 0 2
#3 1 1 2 2
#4 0 1 1 0
#5 1 1 3 0
In base R
,我们还可以unlist
数据集,复制列名称,然后使用table
(不使用任何循环,显式(for
) 或隐式 (lapply
).
table(unlist(df),names(df)[col(df)])
# A B C D
# 1 3 1 0 2
# 2 1 2 0 2
# 3 1 1 2 2
# 4 0 1 1 0
# 5 1 1 3 0
或者正如 @nicola 提到的,而不是col(df)
, 我们可以用rep
(应该更快)
table(unlist(df), rep(names(df),each=nrow(df)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)