如何根据R中的列值选择行

时间:2013-05-01 11:28:41

标签: r matrix dataframe rows

数据集是这样的:

daily.sample
       day1 day2 day3 day4 day5 day6 day7 day8 day9 day10 day11 day12 day13 day14
132304  919  420 1021  331 1012  606  256   58  302    87   859  1140   603  1472
121945  419 1048  541  336 1086  796   95  578 1419   985   752   570   865   242
130055 3036 1473 3043 3291 4869 2902 5306 4480 4820   254  2652  2529  3346   995

我想选择满足以下条件的行:     它的 day1 值是关闭到它的 day8 值     它的 day2 值是关闭到它的 day9 值     它的 day3 值是关闭到它的 day10 值     ......

关闭我的意思是差异在一个范围内,或类似的东西  “0.9

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式从左侧部分简单地减去data.frame的右侧部分:

distance <- abs(daily.sample[ , 1:7, drop = FALSE ] - daily.sample[ , 8:14, drop  =FALSE ])

相应构建比例:

ratio <- daily.sample[ , 1:7, drop = FALSE ] / daily.sample[ , 8:14, drop  =FALSE ]

然后,您可以根据要检查的日期简单地对数据进行分组。

daily.sample[ distance[ ,"day1" ] < 1000, ]

       day1 day2 day3 day4 day5 day6 day7 day8 day9 day10 day11 day12 day13 day14
132304  919  420 1021  331 1012  606  256   58  302    87   859  1140   603  1472
121945  419 1048  541  336 1086  796   95  578 1419   985   752   570   865   242

或者对于范围内的比率:

daily.sample[ ratio[ , "day1"] > 0.7 & ratio[ , "day1"] < (10/7),  ]


       day1 day2 day3 day4 day5 day6 day7 day8 day9 day10 day11 day12 day13 day14
121945  419 1048  541  336 1086  796   95  578 1419   985   752   570   865   242

如果对于后一种情况,范围总是(min.ratio,1 / min.ratio),您可以将比率计算为ratio[ ratio < 1 ] <- 1 / ratio[ ratio < 1 ],而不仅仅是子集:

daily.sample[ ratio[ , "day1"] < (10/7),  ].