Извлечение столбцов, имеющих более определенных значений в R-кадре данных - PullRequest
1 голос
/ 20 марта 2019

У меня есть датафрейм:

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, как показано ниже:

Jux Gyno
0.67    0.89
0.11    0.65
0.6     0.67
0.09    0.01

Вот мой код, который не работал:

out <- vector()

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

Я получил ошибку вроде:

Error in data.frame(Check.names= F...). Argument imply differing number of rows.....

Ответы [ 5 ]

3 голосов
/ 20 марта 2019

Мы могли бы использовать colSums для подстановки столбцов, используя базу R

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

Или с dplyr, select_if

library(dplyr)
df %>% select_if(~any(. > 0.6))
2 голосов
/ 20 марта 2019

здесь есть опция base R с Filter

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

library(dplyr)
df %>% 
    transmute_if(~ any(.x > 0.6), I)

Или с keep

library(purrr)
keep(df, map_lgl(df, ~ any(.x > 0.6)))
2 голосов
/ 20 марта 2019
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 по столбцу:

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
1 голос
/ 20 марта 2019

Пожалуйста, предоставьте воспроизводимый пример для будущих вопросов.

Вот мое решение dplyr:

library(tidyverse)

df <- tibble(First = 0:5,
             Second = 10:15,
             Third = 20:25)

is_greater_than <- function(x) any(x > 10)

select_if(df, is_greater_than)
1 голос
/ 20 марта 2019
> df[ , sapply(df, function(x) any(x>0.6))]
   Jux Gyno
1 0.67 0.89
2 0.11 0.65
3 0.60 0.67
4 0.09 0.01
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...