gpt4 book ai didi

r - 如何动态 "mutate"R 中的数据帧?

转载 作者:行者123 更新时间:2023-12-02 06:15:23 24 4
gpt4 key购买 nike

假设我想记录数据框中的转换列,比如 iris 数据,并为每个所需列动态创建后缀为 _log 的新列。

我想要实现的是:

df$Sepal.Length_log <- log (df$Sepal.Length)
df$Sepal.Width_log <- log (df$Sepal.Width)
df$Petal.Length_log <- log (df$Petal.Length)
df$Sepal.Width_log <- log (df$Sepal.Width)

但是当您的数据有很多列要转换时,这将是一项繁琐的任务,所以我想使用 dplyr 包的循环和 mutate 函数动态地实现这一点,我不成功的 naive 试验是:

library (dplyr)
data(iris)
varLabel <- c('Sepal.Length','Sepal.Width','Petal.Length','Petal.Width')
for (i in 1:length (varLabel)) {
varNew <- paste (varLabel[i],'log',sep='_')
iris <- dplyr::mutate (iris,varNew=log (varLabel[i])) # problem arises here
}

我收到此错误:错误:数学函数的非数字参数

我搜索了一个解决方案,最相关的似乎是这个 tutorial关于标准和非标准评估,这postthat还有一个,但我不知道如何从那里借用解决方案。任何帮助将不胜感激。

注意:
我想在数据集中同时包含旧列和新列。

最佳答案

试试这个

logiris<-data.frame(lapply(varLabel,function(x){log(iris[,x])}))
names(logiris)<-paste0("Log-",varLabel)
iris<-cbind(iris,logiris)

关于r - 如何动态 "mutate"R 中的数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35811653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com