Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.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中:通过对范围为:index==c(min:max)的值进行布尔比较来索引向量_R - Fatal编程技术网

在R中:通过对范围为:index==c(min:max)的值进行布尔比较来索引向量

在R中:通过对范围为:index==c(min:max)的值进行布尔比较来索引向量,r,R,在R中,假设我们有一个向量 area=c(rep(c(26:30),5),rep(c(500:504),5),rep(c(550:554),5),rep(c(76:80),5))和另一个向量yield=c(1:100) 现在,假设我想这样索引: > yield[area==27] [1] 2 7 12 17 22 > yield[area==501] [1] 27 32 37 42 47 没问题,对吧?但是当我尝试使用c(A,B)对它进行索引时,奇怪的事情开始发生。(当我尝试c

在R中,假设我们有一个向量
area=c(rep(c(26:30),5),rep(c(500:504),5),rep(c(550:554),5),rep(c(76:80),5))
和另一个向量
yield=c(1:100)

现在,假设我想这样索引:

> yield[area==27]
[1]  2  7 12 17 22
> yield[area==501]
[1] 27 32 37 42 47
没问题,对吧?但是当我尝试使用
c(A,B)
对它进行索引时,奇怪的事情开始发生。(当我尝试
c(最小值:最大值)
时,甚至更奇怪)

我期待的当然是其他两个例子中出现的实例,而不仅仅是它们的一些奇怪组合。当我可以使用管道或操作器时,此选项有效:

> yield[area==27 | area==501]
 [1]  2  7 12 17 22 27 32 37 42 47
但是如果我在一个靶场工作呢?假设我想按范围
c(27:503)
对其进行索引?在我的真实示例中,有更多的数据点和范围,因此更有意义,请不要建议我手动操作,这基本上意味着:

yield[area==27 | area==28 | area==29 | ... | area==303 | ... | area==500 | area==501]

一定有更好的办法

您想在%中使用
%。还要注意,
c(27:503)
27:503
产生相同的对象

> yield[area %in% 27:503]
 [1]   2   3   4   5   7   8   9  10  12  13  14  15  17
[14]  18  19  20  22  23  24  25  26  27  28  29  31  32
[27]  33  34  36  37  38  39  41  42  43  44  46  47  48
[40]  49  76  77  78  79  80  81  82  83  84  85  86  87
[53]  88  89  90  91  92  93  94  95  96  97  98  99 100
为什么不使用子集

subset(yield, area > 26 & area < 504) ## for indexes
subset(area, area > 26 & area < 504) ## for values
指数的
子集(收益率,面积>26和面积<504)#
值的子集(面积、面积>26和面积<504)##

太棒了,谢谢:)还有,这篇文章到底在哪里被记录下来的?我怎么能不问就找到它?我需要帮助什么?我称之为无用的帮助:P@gakera:它在
?匹配中。你应该通过猜测更好的关键词或阅读完整的参考手册来找到它-P我想我第一次看到
match
是通过
?grep
的“另见”部分。哈哈,猜猜更好的关键词或阅读完整的手册,我喜欢它!R对用户非常友好:D再次感谢。@gakera:出于好奇,您希望在哪里记录这样的内容?也就是说,你在哪里找的?也许应该在某个地方添加一个指向
?match
的链接……需要学习的技巧之一(或要避免的gotcha)是在寻求“帮助”时需要向“?”操作符引用一些参数。如果您在%中键入了“?%”,您将获得match()的帮助页。set函数页上还有一个指向“%in%”的链接,该链接描述了并集(x,y)、相交(x,y)、setdiff(x,y)和setequal(x,y)。。。。它们在正确的环境中都很有用,因为它们返回的是原始元素而不是逻辑向量。[我选中了“R简介”。。关于%或匹配()中的%没有任何内容。]为什么不使用它?原因之一:注意
?子集
中的警告部分,因为
产生[area>26&area<504]
是等效的。警告:这是一个方便的功能,旨在交互使用。对于编程来说,最好使用像“[”这样的标准子集函数,尤其是参数“子集”的非标准求值可能会产生意想不到的后果。@Brandon:请不要把我看得太重。我开始寻找“为什么不”的原因因为那是在你回答的前奏中。;-)不用担心。有趣的是,在我的?子集中,我没有这样的章节。你用的是什么版本?
subset(yield, area > 26 & area < 504) ## for indexes
subset(area, area > 26 & area < 504) ## for values