在 R 中正确的做法是:
for(row in 1:10)
{
counts[row] <- length(otherData[otherData[["some property"]] == otherList[row],])
}
换句话说,在一个新的任何东西(矩阵、data.frame 等)的每一行中放入另一个东西(矩阵、data.frame 等)中与其他列表中的相应条目相等的那些行的计数(再次抽象地说,不是字面上列出对象)?
例如说 x = otherData 是
a b c
d 1 2 3
e 1 3 4
f 2 5 6
g 1 5 3
并说“otherList”是x的第一列,所以我想先计算有多少x的行有1、2、3等
所以我想要计数
3,
1,
0,
(0s as long as this counts list goes)
请注意,我能够选择出该数据子集比获得它的长度更重要;我还需要将该子集用于其他计算,尽管再次想逐行选择它并将我所做的任何计算的输出存储在结果(在本例中为计数)矩阵的行中。
我显然可以用 for 循环来做到这一点,但是跳过循环的聪明方法是什么?
如果这重复了另一个问题,我们深表歉意。这似乎是一个非常基本的问题,但我不确定要搜索哪些术语。这个问题似乎很相似,并且可以延长长度,尽管我不清楚如何在一般情况下应用它。
编辑
这是一个例子。我们选择满足某些行相关条件的 x 的某些行(这里 x 就像我上面的描述中的 otherData),在这种情况下,第一个 col 条目 = 到行,但关键是可以替换“== 行”行上的任何条件,例如“<= otherlist[row]-2”等。
> x
condition value
1 2 25
2 9 72
3 41 60
4 41 61
5 25 38
6 41 10
7 41 43
8 41 26
9 41 46
10 12 263
11 26 136
12 24 107
13 9 70
14 12 62
15 12 136
16 34 44
17 12 53
18 32 14
19 32 148
20 4 34
> results = 0*1:20
> results
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
> for(row in 1:20) {
+ results[row] = length(x[x[["condition"]]==row,2]) }
> results
[1] 0 1 0 1 0 0 0 0 2 0 0 4 0 0 0 0 0 0 0 0