2012-04-08 27 views
6

我在R中有一个数字向量,它包含负数和正数。我想基于符号(忽略现在零)在列表中的号码,分离成两个单独列出:R:从一个向量中选择与条件匹配的项目

  • 一个新的向量仅包含负数
  • 含有的另一种载体只有正数

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

如何做(没有for循环)?

+0

原来,我可以简单地在选择条件中使用矢量的名称中使用。例如:negs < - temp [temp <0] – 2012-04-08 20:32:41

回答

10

这是非常容易做到(楠补充检查):

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)] 
+0

如何忽略选择中的NaNs? – 2012-04-08 21:16:45

+0

我编辑了答案。请注意,d> 0是逻辑模式的向量,对于is.nan(d)和is.na(d)也是如此。对逻辑模式的两个向量应用“逻辑”。 – 2012-04-08 21:53:25

+0

谢谢,你是明星! – 2012-04-08 21:56:08

1

它可以通过使用“方括号”来完成。 将创建一个包含大于零的值的新矢量。由于使用了比较运算符,它将以布尔值表示值。因此方括号用于得到确切的数值。

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] 
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功能

相关问题