„;说服”;制表函数,用于对[R]中数据帧中的NAs进行计数

„;说服”;制表函数,用于对[R]中数据帧中的NAs进行计数,r,dataframe,R,Dataframe,我想再问你一个问题。它基本上是关于[R]中的数据帧、NAs和表格功能 我有这个数据框。我在前面的一个问题中已经用过了。它故意看起来很简单,我真正的“df”数据帧实际上要大得多,我不愿意用巨大的数据库来打扰任何人……所以,我的数据库: id <-c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3) a <-c(3,1,3,3,1,3,3,3,3,1,3,2,1,2,1,3,3,2,1,1,1,3,1,3,3,3,2

我想再问你一个问题。它基本上是关于[R]中的数据帧、NAs和表格功能

我有这个数据框。我在前面的一个问题中已经用过了。它故意看起来很简单,我真正的“df”数据帧实际上要大得多,我不愿意用巨大的数据库来打扰任何人……所以,我的数据库:

id <-c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3)
a <-c(3,1,3,3,1,3,3,3,3,1,3,2,1,2,1,3,3,2,1,1,1,3,1,3,3,3,2,1,1,3)
b <-c(3,2,1,1,1,1,1,1,1,1,1,2,1,3,2,1,1,1,2,1,3,1,2,2,1,3,3,2,3,2)
c <-c(1,3,2,3,2,1,2,3,3,2,2,3,1,2,3,3,3,1,1,2,3,3,1,2,2,3,2,2,3,2)
d <-c(3,3,3,1,3,2,2,1,2,3,2,2,2,1,3,1,2,2,3,2,3,2,3,2,1,1,1,1,1,2)
e <-c(2,3,1,2,1,2,3,3,1,1,2,1,1,3,3,2,1,1,3,3,2,2,3,3,3,2,3,2,1,4)
df <-data.frame(id,a,b,c,d,e)
df
现在我的问题是:如果我的数据框中到处都包含NA值,如果我希望我的内置表格函数也收集这些NAs值,该怎么办?那么,如果我想让它计算我从这些NAs中发生了多少次呢

以下是我使用NAs修改的数据帧:

id <-c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3)
a <-c(NA,1,3,3,1,3,3,3,3,1,3,2,1,2,1,3,3,2,1,1,1,3,1,3,3,3,2,1,1,3)
b <-c(3,2,1,1,1,1,1,1,1,1,1,2,1,3,2,1,1,1,2,1,3,1,2,2,1,3,3,2,3,2)
c <-c(1,3,2,3,2,1,2,3,3,2,2,3,NA,2,3,3,3,1,1,2,3,3,1,2,2,3,2,2,3,2)
d <-c(3,3,3,1,3,2,2,1,2,3,2,2,2,1,3,1,2,2,3,2,3,2,3,2,1,1,1,1,1,2)
e <-c(2,3,1,2,1,2,3,3,1,1,2,1,1,3,3,2,1,1,3,3,2,2,3,3,3,2,3,NA,1,4)
df <-data.frame(id,a,b,c,d,e)
df
你看,我做的唯一一件事就是尝试应用这个
exclude=NULL
东西

至少我的代码意识到这样一个事实:我在
a列中有4个不同的级别
(1,2,3,NA)
,而不仅仅是3个
(1,2,3)
。请在此处查看:

nlevels(factor(df[,2], exclude=NULL))
但从结果中可以看出,它无法计算NAs。上面说

3  0  6  0  4  3  3  0  4  1  5  0 
而不是正确的:

3  0  6  1  4  3  3  0  4  1  5  0
或在以下情况下:

unlist(lapply(df[,(-(1))],function(x) tapply(x,df$id,tabulate,nbins=nlevels(factor(df[,4],exclude=NULL)))) [[3]])
上面说

2  4  4  0  2  3  4  0  1  5  4  0
而不是正确的

2  4  4  0  2  3  4  1  1  5  4  0
等等

有人知道如何“说服”函数列表来计算NAs吗?有可能吗

非常感谢,祝你周末愉快


Laszlo

你就不能用
is.na
?如果要计算NA或非零的条目数,可以
求和(is.NA(my.var)| my.var>0)

难道不能使用
is.NA
?如果要计算NA或非零的条目数,可以
求和(is.NA(my.var)| my.var>0)

您可以简化重复调用:

tabs <-lapply(df[,2:6], function(x, id){ t(table(x, id)) }, df$id)
那么我们现在可以修改它来处理
NA
?是,使用
table()
函数的
useNA
参数。将您的
df
NA
一起使用,我们有:

tabs <-lapply(df[,2:6], 
              function(x, id){ t(table(x, id, useNA = "ifany")) }, df$id)

> tabs[[1]]
   x
id  1 2 3 <NA>
  1 3 0 6    1
  2 4 3 3    0
  3 4 1 5    0
最后一个加法得到了我们想要的结果-我们使用
addNA()
向每个
id
的数字集添加
NA
级别,即使没有记录
NA
s:

tabs <-lapply(df[,2:6], 
              function(x, id){ t(table(addNA(x), id, useNA = "ifany")) }, df$id)
选项卡
一美元
id 1 2 3
1 3 0 6    1
2 4 3 3    0
3 4 1 5    0
b美元
id 1 2 3
1 8 1 1    0
2 6 3 1    0
3 2 4 4    0
$c
id 1 2 3
1 2 4 4    0
2 2 3 4    1
3 1 5 4    0
美元
id 1 2 3
1 2 3 5    0
2 2 6 2    0
3 5 3 2    0
$e
id 1234
1 4 3 3 0    0
2 4 2 4 0    0
3 1 3 4 1    1

您可以简化重复呼叫:

tabs <-lapply(df[,2:6], function(x, id){ t(table(x, id)) }, df$id)
那么我们现在可以修改它来处理
NA
?是,使用
table()
函数的
useNA
参数。将您的
df
NA
一起使用,我们有:

tabs <-lapply(df[,2:6], 
              function(x, id){ t(table(x, id, useNA = "ifany")) }, df$id)

> tabs[[1]]
   x
id  1 2 3 <NA>
  1 3 0 6    1
  2 4 3 3    0
  3 4 1 5    0
最后一个加法得到了我们想要的结果-我们使用
addNA()
向每个
id
的数字集添加
NA
级别,即使没有记录
NA
s:

tabs <-lapply(df[,2:6], 
              function(x, id){ t(table(addNA(x), id, useNA = "ifany")) }, df$id)
选项卡
一美元
id 1 2 3
1 3 0 6    1
2 4 3 3    0
3 4 1 5    0
b美元
id 1 2 3
1 8 1 1    0
2 6 3 1    0
3 2 4 4    0
$c
id 1 2 3
1 2 4 4    0
2 2 3 4    1
3 1 5 4    0
美元
id 1 2 3
1 2 3 5    0
2 2 6 2    0
3 5 3 2    0
$e
id 1234
1 4 3 3 0    0
2 4 2 4 0    0
3 1 3 4 1    1

-1这也在r中发布-help@G.格罗森迪克---加博,这是对投票系统的不恰当使用。投票机制旨在确定有用或明确的Q,而不是无用或不明确的Q。那么,R-Help是否有一个单独的实体?如果Q发布在那里和这里,那又有什么关系呢?这并不是说@Laszlo用他的Q对几个SE网站进行了垃圾邮件攻击。而且,无论是谁投票以“不是真正的Q”的方式关闭网站,你是如何得到这种意见的?一旦您通过了过于显式的代码,Q就相当清晰了@Laszlo希望计算
NA
以及其他级别的因子。@GS,在多个地点发布的问题将答案和讨论分开。他们应该关闭,以阻止这种情况发生,除非时间已经过去而没有答案。@Gabor-但这不是这里投票机制的目的。为什么R-help是发布Q的“主要”场所?你似乎是这么说的。可以说,这个Q是在R-Help之前发布的。-1这也是在R-Help中发布的-help@G.格罗森迪克---加博,这是对投票系统的不恰当使用。投票机制旨在确定有用或明确的Q,而不是无用或不明确的Q。那么,R-Help是否有一个单独的实体?如果Q发布在那里和这里,那又有什么关系呢?这并不是说@Laszlo用他的Q对几个SE网站进行了垃圾邮件攻击。而且,无论是谁投票以“不是真正的Q”的方式关闭网站,你是如何得到这种意见的?一旦您通过了过于显式的代码,Q就相当清晰了@Laszlo希望计算
NA
以及其他级别的因子。@GS,在多个地点发布的问题将答案和讨论分开。他们应该关闭,以阻止这种情况发生,除非时间已经过去而没有答案。@Gabor-但这不是这里投票机制的目的。为什么R-help是发布Q的“主要”场所?你似乎是这么说的。有人可能会说,这个问题是在R-Help之前发布在这里的。下层选民是否愿意解释为什么他们对答案投了反对票?我想我知道是谁和为什么——如果我的怀疑是正确的,下层选民是另一种滥用(滥用)行为我想我知道是谁和为什么——如果我的怀疑是正确的,那么,否决票就是对投票系统的另一种滥用(滥用)。
tabs <-lapply(df[,2:6], 
              function(x, id){ t(table(addNA(x), id, useNA = "ifany")) }, df$id)
> tabs
$a

id  1 2 3 <NA>
  1 3 0 6    1
  2 4 3 3    0
  3 4 1 5    0

$b

id  1 2 3 <NA>
  1 8 1 1    0
  2 6 3 1    0
  3 2 4 4    0

$c

id  1 2 3 <NA>
  1 2 4 4    0
  2 2 3 4    1
  3 1 5 4    0

$d

id  1 2 3 <NA>
  1 2 3 5    0
  2 2 6 2    0
  3 5 3 2    0

$e

id  1 2 3 4 <NA>
  1 4 3 3 0    0
  2 4 2 4 0    0
  3 1 3 4 1    1