R中数据帧中的条目数

Mic*_*ael 24 r count dataframe

我想要计算以下数据框:

> Santa
   Believe Age Gender Presents Behaviour
1    FALSE   9   male       25   naughty
2     TRUE   5   male       20      nice
3     TRUE   4 female       30      nice
4     TRUE   4   male       34   naughty
Run Code Online (Sandbox Code Playgroud)

相信的孩子数量.我会用什么命令来获取它?

(实际数据框架要大得多.我刚给你前四行......)

谢谢!

rcs*_*rcs 38

你可以使用table:

R> x <- read.table(textConnection('
   Believe Age Gender Presents Behaviour
1    FALSE   9   male       25   naughty
2     TRUE   5   male       20      nice
3     TRUE   4 female       30      nice
4     TRUE   4   male       34   naughty'
), header=TRUE)

R> table(x$Believe)

FALSE  TRUE 
    1     3 
Run Code Online (Sandbox Code Playgroud)


dou*_*oug 23

我认为这是一个两步过程:

  1. 根据提供的过滤器子集原始数据帧(Believe == FALSE); 然后

  2. 获取此子集的行数

对于第一步,子集函数是一种很好的方法(只是普通索引或括号表示法的替代方法).

对于第二步,我会使用暗淡无效

使用子集的一个优点是:您不必解析它返回的结果以获得所需的结果 - 只需直接调用nrow就可以了.

所以在你的情况下:

v = nrow(subset(Santa, Believe==FALSE))     # 'subset' returns a data.frame
Run Code Online (Sandbox Code Playgroud)

或包装在匿名函数中:

>> fnx = function(fac, lev){nrow(subset(Santa, fac==lev))}

>> fnx(Believe, TRUE)
      3
Run Code Online (Sandbox Code Playgroud)

除了nrow,昏暗也将完成这项工作.此函数返回数据框(行,列)的维度,因此您只需提供适当的索引来访问行数:

v = dim(subset(Santa, Believe==FALSE))[1] 
Run Code Online (Sandbox Code Playgroud)

在此之前发布的OP的答案显示了列联表的使用.对于OP中所述的一般问题,我不喜欢这种方法.这就是原因.当然,这个数据框中有多少行在C列中的值为x的一般问题是什么?可以使用列联表以及使用"过滤"方案来回答(如我在这里的回答).如果您想要给定因子变量(列)的所有值的行计数,那么列联表(通过调用并传入感兴趣的列)是最明智的解决方案; 但是,OP要求对因子变量中的特定值进行计数,而不是对所有值进行计数.除了性能损失(可能很大,可能很简单,只取决于数据框的大小和此函数所在的处理管道上下文).当然,一旦返回表调用的结果,您仍然需要从该结果中解析出您想要的计数.

所以这就是为什么,对我来说,这是一个过滤而不是交叉表问题.

  • 注意到'nrow()`.:) (5认同)