R: выбор элементов фрейма данных по условию

#r #function #dataframe

#r #функция #фрейм данных

Вопрос:

Я новичок в R, и у меня есть фрейм данных с некоторыми данными. У меня есть несколько условных функций, возвращающих True или False , и я хочу выбрать элементы фрейма данных, которые будут иметь все True .

 frame:
    V1    V2   V3   V4
1:  "abc" 6    4    1b2
2:  kk    wq2 "3 4" 8
  

Например:

 first_func <- function(x) is.digit(x) # will choose all numerics
second_func <- function(x) x > 5 # will choose only numbers > 5
  

Я хочу выбрать все элементы > 5 и применить к ним другую функцию, например

 third_function <- function(x) x^2 # for only numbers > 5 get square
  

Я хочу получить этот результат:

 frame:
    V1    V2  V3   V4
1:  "abc" 36  4    1b2
2:  kk    wq "3 4" 64
  

Как я могу сделать это правильно, используя синтаксис R?

Комментарии:

1. Можете ли вы поделиться воспроизводимым примером с использованием dput() и ожидаемого результата

2. Не могли бы вы отформатировать свои образцы данных, используя имена столбцов и отступы?

Ответ №1:

Попробуйте этот подход со apply() встроенной функцией и:

 #Code
myfun <- function(x)
{
  y <- as.numeric(x)
  z <- ifelse(!is.na(y) amp; y>5,y^2,x)
  return(z)
}
#Apply
Res <- as.data.frame(t(apply(df,1,myfun)))
  

Вывод:

 Res
   V1  V2  V3  V4
1 abc  36   4 1b2
2  kk wq2 3 4  64
  

Некоторые используемые данные:

 #Data
df <- structure(list(V1 = c("abc", "kk"), V2 = c("6", "wq2"), V3 = c("4", 
"3 4"), V4 = c("1b2", "8")), class = "data.frame", row.names = c(NA, 
-2L))
  

Тот же подход может быть получен с sapply() :

 #Code 2
Res2 <- as.data.frame(sapply(df,myfun))
  

Вывод:

 Res2
   V1  V2  V3  V4
1 abc  36   4 1b2
2  kk wq2 3 4  64
  

Комментарии:

1. это не работает, если функции не так просты, мне нужно знать, как в основном выбирать значения для любых условий True или False

2. @Angelika Я не понимаю, на какие функции вы ссылаетесь, не могли бы вы уточнить?