我有一个包含几列的数据框。一栏中的值可以为负或正。 我想在此列中的每个条目上应用一个函数,以便万一它为负数,它将设置为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))
我不确定它的正确方法,尽管我无法使其正常工作。可能对“应用”也有错误的理解
答案 0 :(得分:0)
如果只想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
答案 1 :(得分:0)
您可以将sapply内部的函数直接用作lamda,而不必单独定义它:
sapply(df$value,function(x){
if (x > 0 ){
return(x)
}
else return(0)
})