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