首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >提取R数据中大于某些值的列

提取R数据中大于某些值的列
EN

Stack Overflow用户
提问于 2019-03-20 14:39:09
回答 5查看 13.8K关注 0票数 1

我有个数据:

代码语言:javascript
复制
Alix    Blim    Jux Gyno
0.105   0.234   0.67    0.89
0.01    0.542   0.11    0.65
0.003   0.002   0.6     0.67
0.009   0.123   0.09    0.01

我想从上面的数据中提取值大于0.6的所有列,如下所示:

代码语言:javascript
复制
Jux Gyno
0.67    0.89
0.11    0.65
0.6     0.67
0.09    0.01

以下是我的代码不起作用:

代码语言:javascript
复制
out <- vector()

for(i in colnames(df){
  if(df[i] > 0.6){
     T <- df[,i]
  }
  out <- cbind.data.frame(out,T)
}

我犯了一个错误,比如:

代码语言:javascript
复制
Error in data.frame(Check.names= F...). Argument imply differing number of rows.....
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-03-20 14:40:57

我们可以使用colSums来使用基R对列进行子集

代码语言:javascript
复制
df[colSums(df > 0.6) > 0]

# Jux Gyno
#1 0.67 0.89
#2 0.11 0.65
#3 0.60 0.67
#4 0.09 0.01

或者用dplyrselect_if

代码语言:javascript
复制
library(dplyr)
df %>% select_if(~any(. > 0.6))
票数 5
EN

Stack Overflow用户

发布于 2019-03-20 14:41:13

代码语言:javascript
复制
df <- read.table(text='Alix    Blim    Jux Gyno
0.105   0.234   0.67    0.89
0.01    0.542   0.11    0.65
0.003   0.002   0.6     0.67
0.009   0.123   0.09    0.01
', header=T)

我们可以使用sapply在每一列中找到最大值,然后检查它是否大于0.6。这提供了一个逻辑向量,我们可以使用它按列对df进行子集:

代码语言:javascript
复制
df[,sapply(df, max) > 0.6]

   Jux Gyno
1 0.67 0.89
2 0.11 0.65
3 0.60 0.67
4 0.09 0.01
票数 2
EN

Stack Overflow用户

发布于 2019-03-20 14:43:22

下面是一个带有base RFilter选项

代码语言:javascript
复制
Filter(function(x) any(x > 0.6), df)
#  Jux Gyno
#1 0.67 0.89
#2 0.11 0.65
#3 0.60 0.67
#4 0.09 0.01

或者使用transmute_if

代码语言:javascript
复制
library(dplyr)
df %>% 
    transmute_if(~ any(.x > 0.6), I)

或使用keep

代码语言:javascript
复制
library(purrr)
keep(df, map_lgl(df, ~ any(.x > 0.6)))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55263403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档