我在 R 中有一个数字向量,它由负数和正数组成。我想根据符号(暂时忽略零)将列表中的数字分成两个单独的列表:
- 仅包含负数的新向量
- 另一个仅包含正数的向量
该文档显示了如何在数据框中选择行/列/单元格 - 但这不适用于向量 AFAICT。
怎么做(没有 for 循环)?
我在 R 中有一个数字向量,它由负数和正数组成。我想根据符号(暂时忽略零)将列表中的数字分成两个单独的列表:
该文档显示了如何在数据框中选择行/列/单元格 - 但这不适用于向量 AFAICT。
怎么做(没有 for 循环)?
它很容易完成(添加了对 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)]
它可以通过使用“方括号”来完成。创建一个新向量,其中包含那些大于零的值。由于使用了比较运算符,它将表示布尔值。因此,方括号用于获取确切的数值。
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]
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
功能