【发布时间】:2020-09-25 05:14:28
【问题描述】:
如何在数据框中选择具有负值的列。对于下面的数据框,要选择列 x、y 和 z
data <- data.frame(x = c(-2,3,4), y = c(2,1,-5), z = c(1,-5,6), a = c(1,2,3))
【问题讨论】:
如何在数据框中选择具有负值的列。对于下面的数据框,要选择列 x、y 和 z
data <- data.frame(x = c(-2,3,4), y = c(2,1,-5), z = c(1,-5,6), a = c(1,2,3))
【问题讨论】:
这里有一些其他的方法:
colSums:data[colSums(data < 0) > 0]
# x y z
#1 -2 2 1
#2 3 1 -5
#3 4 -5 6
Filter:Filter(function(x) any(x < 0), data)
select 来自dplyr
library(dplyr)
data %>% select(where(~any(. < 0)))
#select_if if you have older version
#data %>% select_if(~any(. < 0))
【讨论】:
一种方法是在 R 中使用 sapply 和 apply 函数
x
名字(x)
请随意提出其他方法
【讨论】:
另一种方法是:
data[, sapply(1:ncol(data), function(i) any(data[, i] < 0))]
或使用purrr:
data %>% purrr::keep(~any(. < 0))
data %>% purrr::discard(~!any(. < 0))
这将产生:
# x y z
# 1 -2 2 1
# 2 3 1 -5
# 3 4 -5 6
【讨论】:
sapply 上使用 data 而无需子集 - sapply(data, function(i) any(i < 0) )
data[apply(data, 2, function(col) any(col < 0))]
expr 对向量/列表中的任何元素都成立时,any(expr) 返回 true。apply(x, margin, fun),其中margin = 2 表示在列上矢量化【讨论】: