Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 获取包含零的数据帧的范围_R - Fatal编程技术网

R 获取包含零的数据帧的范围

R 获取包含零的数据帧的范围,r,R,这里有一个简单的问题。我有一个值从0到3的数据框,我想得到数据集的元素数,在本例中应该是4。以下是数据示例: structure(list(X1 = c(2L, 2L, 2L, 2L, 2L, 1L, 3L, 2L, 2L), X2 = c(1L, 1L, 1L, 2L, 1L, 0L, 2L, 3L, 1L), X3 = c(2L, 1L, 2L, 2L, 0L, 0L, 2L, 3L, 1L), X4 = c(1L, 2L, 2L, 2L, 1L, 2L, 0L, 2L, 2L), X5

这里有一个简单的问题。我有一个值从0到3的数据框,我想得到数据集的元素数,在本例中应该是4。以下是数据示例:

structure(list(X1 = c(2L, 2L, 2L, 2L, 2L, 1L, 3L, 2L, 2L), X2 = c(1L, 
1L, 1L, 2L, 1L, 0L, 2L, 3L, 1L), X3 = c(2L, 1L, 2L, 2L, 0L, 0L, 
2L, 3L, 1L), X4 = c(1L, 2L, 2L, 2L, 1L, 2L, 0L, 2L, 2L), X5 = c(1L, 
2L, 1L, 2L, 1L, 0L, 1L, 2L, 1L), X6 = c(1L, 2L, 1L, 1L, 1L, 2L, 
1L, 2L, 1L)), .Names = c("X1", "X2", "X3", "X4", "X5", "X6"), class = "data.frame", row.names = c(NA, 
-9L))
我尝试了
diff(range(d))
,但它不算0。提前感谢。

diff(范围(d))
返回最小值和最大值之间的差值,分别为0和3

您要做的是计算一个集合中有多少个元素。尝试
长度(d)

d
diff(范围(d))
返回最小值和最大值之间的差值,分别为0和3

您要做的是计算一个集合中有多少个元素。尝试
长度(d)


d根据您现在提供的
d
的结构,您可以对此进行逐列计算

> diff(range(d$X1))+1
[1] 3
> diff(range(d$X1))+1
[1] 3
> diff(range(d$X2))+1
[1] 4
> diff(range(d$X3))+1
[1] 4
> diff(range(d$X4))+1
[1] 3
> diff(range(d$X5))+1
[1] 3
> diff(range(d$X6))+1
[1] 2
或者您可以在所有列上循环

> lapply(d, function(dp) {diff(range(dp))+1})
$X1
[1] 3

$X2
[1] 4

$X3
[1] 4

$X4
[1] 3

$X5
[1] 3

$X6
[1] 2
或者,如果希望所有列的范围都集中在一起,请将其视为矩阵:

> diff(range(as.matrix(d)))+1
[1] 4

根据您现在提供的
d
的结构,您可以对此进行逐列计算

> diff(range(d$X1))+1
[1] 3
> diff(range(d$X1))+1
[1] 3
> diff(range(d$X2))+1
[1] 4
> diff(range(d$X3))+1
[1] 4
> diff(range(d$X4))+1
[1] 3
> diff(range(d$X5))+1
[1] 3
> diff(range(d$X6))+1
[1] 2
或者您可以在所有列上循环

> lapply(d, function(dp) {diff(range(dp))+1})
$X1
[1] 3

$X2
[1] 4

$X3
[1] 4

$X4
[1] 3

$X5
[1] 3

$X6
[1] 2
或者,如果希望所有列的范围都集中在一起,请将其视为矩阵:

> diff(range(as.matrix(d)))+1
[1] 4
length(unique(…)
应用于矩阵或数据帧时,可能会发生一些意想不到的事情(尽管有详细的文档记录)

s <- structure(list(X1 = c(2L, 2L, 2L, 2L, 2L, 1L, 3L, 2L, 2L), X2 = c(1L, 
1L, 1L, 2L, 1L, 0L, 2L, 3L, 1L), X3 = c(2L, 1L, 2L, 2L, 0L, 0L, 
2L, 3L, 1L), X4 = c(1L, 2L, 2L, 2L, 1L, 2L, 0L, 2L, 2L), X5 = c(1L, 
2L, 1L, 2L, 1L, 0L, 1L, 2L, 1L), X6 = c(1L, 2L, 1L, 1L, 1L, 2L, 
1L, 2L, 1L)), .Names = c("X1", "X2", "X3", "X4", "X5", "X6"), class = "data.frame", row.names = c(NA, 
-9L))
应用于矩阵的
unique
也会返回唯一的行,但现在
length()
统计元素总数:对于您的数据,这通常相当于
ncol*nrow

如果要将
unique
应用于这种情况下的元素,可能需要以下选项之一,所有这些选项都会将原始数据帧向下折叠为单个向量:

length(unique(as.vector(as.matrix(s)))) ## 4
length(unique(unlist(s)))  ## 4
length(unique(c(as.matrix(s)))) ## 4
您想要的是
diff(range(x))+1
还是
length(unique(…)
,取决于您想要如何计算(例如)完全由
{0,1,2,4}
组成的数据帧,它应该返回4还是5?(正如@Brian Diggs在他的回答中指出的,
diff(range(…)+1
将在矩阵上工作,而无需进一步展平结构——它也将在
unlist()
ed数据帧上工作。)

长度(唯一(…)
可能会产生一些意想不到的结果(尽管有完整的文档记录)当应用到矩阵或数据帧时

s <- structure(list(X1 = c(2L, 2L, 2L, 2L, 2L, 1L, 3L, 2L, 2L), X2 = c(1L, 
1L, 1L, 2L, 1L, 0L, 2L, 3L, 1L), X3 = c(2L, 1L, 2L, 2L, 0L, 0L, 
2L, 3L, 1L), X4 = c(1L, 2L, 2L, 2L, 1L, 2L, 0L, 2L, 2L), X5 = c(1L, 
2L, 1L, 2L, 1L, 0L, 1L, 2L, 1L), X6 = c(1L, 2L, 1L, 1L, 1L, 2L, 
1L, 2L, 1L)), .Names = c("X1", "X2", "X3", "X4", "X5", "X6"), class = "data.frame", row.names = c(NA, 
-9L))
应用于矩阵的
unique
也会返回唯一的行,但现在
length()
统计元素总数:对于您的数据,这通常相当于
ncol*nrow

如果要将
unique
应用于这种情况下的元素,可能需要以下选项之一,所有这些选项都会将原始数据帧向下折叠为单个向量:

length(unique(as.vector(as.matrix(s)))) ## 4
length(unique(unlist(s)))  ## 4
length(unique(c(as.matrix(s)))) ## 4

您想要的是
diff(range(x))+1
还是
length(unique(…)
,取决于您想要如何计算(例如)完全由
{0,1,2,4}
组成的数据帧,它应该返回4还是5?(正如@Brian Diggs在他的回答中指出的,
diff(range(…)+1
将在矩阵上工作,而无需进一步展平结构——它也将在
unlist()
ed数据帧上工作。)

感谢您的回答。我试过长度,但那不是我想要的。我有一个包含136个元素的数据集,每个元素的范围从0到3。我需要获得可能答案的数量(从0到3,包括0作为答案)。:)所以您需要数据集中出现的值的数量,对吗?让我们假设它有5个元素,而不是136个。你想让它返回33333或11111的1。。。22233、21111或03030。。。。12322的3个。。。。2012年1月30日4日。。。是这样的吗?然后正如joran所说,长度(唯一的(d))将完成这个技巧,不,它比这个简单得多。考虑序列{ 0 2、1、2、3、1、3、2、2、1、0、3 },我想得到包括3作为值的值范围。因此它应该是4。@Werner
length(unique())
符合您的描述。如果没有,那么你就没有成功地描述你需要做什么。@Werner如果是这样的话,那么你就在你的数据结构上误导了我们。编辑您的问题,包括一个可复制的例子,说明您的数据。感谢您的回答。我试过长度,但那不是我想要的。我有一个包含136个元素的数据集,每个元素的范围从0到3。我需要获得可能答案的数量(从0到3,包括0作为答案)。:)所以您需要数据集中出现的值的数量,对吗?让我们假设它有5个元素,而不是136个。你想让它返回33333或11111的1。。。22233、21111或03030。。。。12322的3个。。。。2012年1月30日4日。。。是这样的吗?然后正如joran所说,长度(唯一的(d))将完成这个技巧,不,它比这个简单得多。考虑序列{ 0 2、1、2、3、1、3、2、2、1、0、3 },我想得到包括3作为值的值范围。因此它应该是4。@Werner
length(unique())
符合您的描述。如果没有,那么你就没有成功地描述你需要做什么。@Werner如果是这样的话,那么你就在你的数据结构上误导了我们。编辑您的问题,以包含一个可复制的示例来说明您的数据。我认为混淆之处在于,
diff
给出了端点的差异(在您的示例中,范围是0到3,差异是3;如果范围是1到4,差异仍然是3。0是一个误导)。您想要的是0到3范围内的整数数量,即(假设端点是整数)比差值多一个
diff(范围(d))+1
(正如@Tom在另一篇评论中所说)。同样,如果数字是1、2、3和4,这也是正确的。@BrianDiggs是的,除了OP刚才提到的
length(unique())
返回