R- data.frame 中的计数值

问题描述 投票:0回答:3
df <- data.frame(row.names = c('ID1','ID2','ID3','ID4'),var1 = c(0,1,2,3),var2 = c(0,0,0,0),var3 = c(1,2,3,0),var4 = c('1','1','2','2'))
> df
    var1 var2 var3 var4
ID1    0    0    1    1
ID2    1    0    2    1
ID3    2    0    3    2
ID4    3    0    0    2

我希望 df 看起来像这样

   var1  var2  var3  var4
0   1     4     1     0
1   1     0     1     2
2   1     0     1     2
3   1     0     1     0

所以我想要计算 df 的值。问题是,并非每个值都出现在每一列中。 我尝试了这个

lapply(df,table)
但它返回一个列表,我无法将其转换为 data.frame (由于上述原因)。 我可以使用
table(df$var1)
手动完成此操作,并在对每个 var 执行此操作后将所有内容绑定在一起,但这很无聊。你能找到更好的方法吗?

谢谢;)

r dataframe count
3个回答
2
投票

使用整个数据集中存在的因子水平调用

table
函数。

sapply(df,function(x) table(factor(x, levels = 0:3)))

#  var1 var2 var3 var4
#0    1    4    1    0
#1    1    0    1    2
#2    1    0    1    2
#3    1    0    1    0

如果您事先不知道您的数据可以达到什么级别,我们可以从数据本身找到它。

vec <- unique(unlist(df))
sapply(df, function(x) table(factor(x, levels = vec)))

0
投票

我们可以在没有任何循环的情况下做到这一点

table(c(col(df)), unlist(df))

#    0 1 2 3
#   1 1 1 1 1
#   2 4 0 0 0
#   3 1 1 1 1
#   4 0 2 2 0

0
投票

计算 data.frame 中值的总数(无论它们是什么):

df |> as_vector() |> length()

© www.soinside.com 2019 - 2024. All rights reserved.