r - R 冒号 v. 中函数内子集的参数大于或等于

标签 r operators subset

假设我有以下数据。

x<- c(1,2, 3,4,5,1,3,8,2)
y<- c(4,2, 5,6,7,6,7,8,9)
data<-cbind(x,y)

    x   y
1   1   4
2   2   2
3   3   5
4   4   6
5   5   7
6   1   6
7   3   7
8   8   8
9   2   9  

现在,如果我对这些数据进行子集化以仅选择“x”在 1 到 3 之间的观察值,我可以这样做:

s1<- subset(data, x>=1 & x<=3)

并获得我想要的输出:

    x   y
1   1   4
2   2   2
3   3   5
4   1   6
5   3   7
6   2   9

但是,如果我使用冒号运算符进行子集化,我会得到不同的结果:

s2<- subset(data, x==1:3)

    x   y
1   1   4
2   2   2
3   3   5

这次它只包括“x”为 1,2 或 3 的第一个观测值。为什么? 我想使用“:”运算符,因为我正在编写一个函数,因此用户可以输入一系列值,她希望从中查看根据“y”变量计算的平均值。如果他们可以使用“:”运算符将此参数传递给我的函数内的子集函数,我会更愿意,但我不知道为什么用“:”进行子集化会给我不同的结果。

对于这方面的任何建议,我将不胜感激。

最佳答案

您可以使用 %in% 代替 ==

 subset(data, x %in% 1:3)

一般来说,如果我们比较两个大小不等的向量,将使用 %in%。在某些情况下,如果其中一个向量的长度是第二个向量的两倍,我们可以利用回收(它也可能失败)。一些带有一些描述的示例是 here .

关于r - R 冒号 v. 中函数内子集的参数大于或等于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30808078/

相关文章:

r - 在 Rcpp 中通过调用 `[data.frame` 对 data.frame 进行子集化时避免 SIGSEGV

r - 如何从 R 中另一个向量的值中提取数据集的行

c++ - Qt修改PathItem

performance - 数据帧子集性能

r - R 中具有动态条件的子集数据

r - 如何将两个变量转置/转换为一行?

r - R 中特定值的计数器顺序

f# - 运算符优先级和关联

c++ - Operator = 在 C++ 中使用 Const 变量重载

r - 按因子水平划分的子设置观测值超过 x 个观测值