【发布时间】:2018-03-15 06:08:07
【问题描述】:
我有一个包含多个列变量和大约 10 行复制的数据框,还有一个包含相同变量但 700 行的第二个数据框。我想创建一个循环,获取第二个数据帧中行的每个值,看看它是否在第一个数据帧的相应列的范围内。到目前为止,我已经尝试了一个相当不雅的长 for loop,其中有很多语法错误,以至于我不知道从哪里开始修复它。
这是我的数据框的缩短版本。数据框 1:c1a
WAV UV VIOLET BLUE
2D1 10.8 10.1 23.5
3A4 6.2 8.2 19.9
4A1 8.3 11.7 28.6
5C2 7.9 8.2 31.0
5C3 10.7 9.5 18.1
数据框 2:paint2
ID UV VIOLET BLUE
D1 7.9 10.1 19.3
D2 7.0 9.2 15.9
D3 21.4 20.7 27.4
D4 10.3 8.9 20.9
D5 21.7 16.5 21.3
所以我想要查看 D1 的每个值是否落入数据帧 1 的相应列的范围内,依此类推,然后得到所有列都成功的 ID 的输出。
我的代码:
c1a.out=NULL
for (i in nrow(paint2)){
if (min(c1a[,2]) < [i,2] < max(c1a[,2])
&& min(c1a[,3]) < [i,3] < max(c1a[,3])
&& min(c1a[,4]) < [i,4] < max(c1a[,4])){
c1a.out=c(c1a.out, [i,1])
}
}
输出将只是一个列表,其中 ID 名称的值落在第一个数据帧中整个 COLUMN 的范围内。
>c1a.out
>D1 D4
例如,D2 没有进入列表,因为它的 BLUE 值不在 c1a 中的 BLUE 值范围内,即使它的 UV 和 VIOLET 值在 c1a 中它们各自列的范围内。
我知道这很丑,但我对制作循环知之甚少。 如果对我收到的错误(意外的括号和逗号)进行了更正,或者可以创建更简单、更优雅的循环版本,我会全力以赴。
【问题讨论】:
-
c1a中的每个 ID 是否应该有多个值?否则min和max毫无意义。包含所需输出的完全可重现的示例将非常有帮助。 -
不,我希望 ID 行中的每个值都在 c1a 中同一变量的整个列中进行测试。所以我想看看 D1 的 UV 值是否在 c1a UV 列的范围内,并对每一列重复此操作。然后在每一行上循环。输出只是一个列表,其中列出了哪些行 (ID) 的所有值都在 c1a 的相应列的范围内。抱歉,我觉得这很难解释。我会在帖子中添加一些细节。
标签: r for-loop if-statement