R:从矢量中选择匹配标准的项目

时间:2012-04-08 20:29:23

标签: r

我在R中有一个数字向量,它由负数和正数组成。我想根据符号(暂时忽略零)将列表中的数字分成两个单独的列表:

  • 仅包含负数的新向量
  • 另一个仅包含正数的向量

该文档显示了如何在数据框中选择行/列/单元格 - 但这不适用于矢量AFAICT。

怎么做(没有for循环)?

3 个答案:

答案 0 :(得分:12)

很容易完成(添加了对NaN的检查):

d <- c(1, -1, 3, -2, 0, NaN)

positives <- d[d>0 & !is.nan(d)]
negatives <- d[d<0 & !is.nan(d)]

如果要同时排除NA和NaN,则is.na()将同时返回true:

d <- c(1, -1, 3, -2, 0, NaN, NA)

positives <- d[d>0 & !is.na(d)]
negatives <- d[d<0 & !is.na(d)]

答案 1 :(得分:1)

可以使用&#34;方括号&#34;来完成。 创建一个新向量,其中包含大于零的值。由于使用了比较运算符,因此它将表示布尔值。因此,方括号用于获得精确的数值。

d_vector<-(1,2,3,-1,-2,-3)
new_vector<-d_vector>0 
pos_vector<-d_vector[new_vector]
new1_vector<-d_vector<0
neg_vector<-d_vector[new1_vector]

答案 2 :(得分:0)

purrr包中包含一些用于过滤矢量的有用函数:

library(purrr)
test_vector <- c(-5, 7, 0, 5, -8, 12, 1, 2, 3, -1, -2, -3, NA, Inf, -Inf, NaN)

positive_vector <- keep(test_vector, function(x) x > 0)
positive_vector
# [1]   7   5  12   1   2   3 Inf

negative_vector <- keep(test_vector, function(x) x < 0)
negative_vector
# [1]   -5   -8   -1   -2   -3 -Inf

您也可以使用discard功能