Применить функцию с параметрами для каждого элемента данных в R - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть датафрейм с несколькими столбцами.В одном столбце есть записи со значениями, которые могут быть отрицательными или положительными.Я хотел бы применить функцию к каждой записи в этом столбце, чтобы в случае, если она была отрицательной, она была установлена ​​на 0, а в противном случае значение должно оставаться как есть.

Моя идея заключалась в следующем:

df <- data.frame("ID" = c(1,2,3,4,5),"value" = c(1,-1,0,2,-2))

f <- function(value) {
  if (value > 0 ){
    return(value)
  }
  else return(0)
}

, а затем используйте что-то вроде функции apply в столбце «значение» информационного кадра.

например:

df$newValue <- apply(df, f(df$value))

Я не уверен, что это правильноподход, хотя, как я не заставляю его работать.Вероятно, неправильно понимая «применять», а также

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Вы можете напрямую использовать функцию внутри sapply как lamda вместо того, чтобы определять ее отдельно:

sapply(df$value,function(x){
  if (x > 0 ){
    return(x)
  }
  else return(0)
})
0 голосов
/ 10 декабря 2018

Если вы хотите это только для value:

df$value[df$value<0] <- 0

Для newvalue:

df$newvalue <- df$value # first copy all values
df$newvalue[df$value<0] <- 0 # change by the rule

или для всех столбцов, вам просто нужно:

df[df<0] <- 0
#   ID value
# 1  1     1
# 2  2     0
# 3  3     0
# 4  4     2
# 5  5     0

Поскольку df<0 даст вам TRUE там, где это условие выполнено, во всех столбцах:

df<0
        ID value
[1,] FALSE FALSE
[2,] FALSE  TRUE
[3,] FALSE FALSE
[4,] FALSE FALSE
[5,] FALSE  TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...