R 如何在整个数据帧中用计算值替换负值

R 如何在整个数据帧中用计算值替换负值,r,dataframe,R,Dataframe,我有一个巨大的数据框,在不同的列中有许多负值,应该等于它们的原始值*0.5。 我尝试应用了很多R函数,但似乎找不到一个函数可以用于整个数据帧。 我想要如下(不工作)代码: mydf[] <- replace(mydf[], mydf[] < 0, mydf[]*0.5) mydf[]您可以尝试在整个数据帧上使用lappy(),在每个列上依次进行替换 df <- lapply(df, function(x) { x <- ifelse(x < 0, x*0.

我有一个巨大的数据框,在不同的列中有许多负值,应该等于它们的原始值*0.5。 我尝试应用了很多R函数,但似乎找不到一个函数可以用于整个数据帧。 我想要如下(不工作)代码:

mydf[] <- replace(mydf[], mydf[] < 0, mydf[]*0.5)

mydf[]您可以尝试在整个数据帧上使用
lappy()
,在每个列上依次进行替换

df <- lapply(df, function(x) {
    x <- ifelse(x < 0, x*0.5, x)
})
df您只需

mydf[mydf<0] <- mydf[mydf<0] * 0.5

mydf[mydf在
replace
中,
values
参数的长度应与
列表中的真值数相同('index'
vector

数据
set.seed(24)

mydf此解决方案失败,例如:“非数值参数转换为二进制运算符”是否有非数值的列?是的,可能缺少某些数据。矩阵中出现错误(unlist(value,recursive=FALSE,use.names=FALSE),nrow=nr,:“data”必须是向量类型,是“NULL”Tim的解决方案工作正常。我喜欢它。谢谢你。谢谢,这项工作。我刚刚添加了as.data.frame以将列表转换回数据帧。
df
ind <- sapply(mydf, is.numeric)
mydf1 <- mydf[ind]
mydf1[mydf1<0] <- mydf1[mydf1<0] * 0.5
mydf[ind] <- mydf1
replace(mydf, mydf <0, mydf[mydf <0]*0.5)
library(data.table)
for(j in seq_along(mydf)){
  i1 <- mydf[[j]] < 0
  set(mydf, i = which(i1), j= j, value = mydf[[j]][i1]*0.5)
 }
set.seed(24)
mydf <- as.data.frame(matrix(rnorm(25), 5, 5))