假设我有以下数据。
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/