#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 Я не понимаю, на какие функции вы ссылаетесь, не могли бы вы уточнить?