gpt4 book ai didi

r - 如何使用 sapply 结果更新数据框变量?

转载 作者:行者123 更新时间:2023-12-04 10:38:45 25 4
gpt4 key购买 nike

我有许多 Excel 文件,我将在将它们另存为 CSV 文件后将它们加载到 R 中。每个 Excel 文件都有几个采用货币格式的列。我可以手动或使用 VBA 调整 Excel 中的每一列,但我更喜欢在 R 中转换变量。我使用 sapply 创建一个矩阵,其中包含新的列值和格式。

我在使用 sapply 结果更改变量时遇到问题。我正在尝试使用 assignfor 中建立索引循环,但它不起作用。

这是一个示例数据框和我的代码。你能帮我修一下最后一部分吗?另外,将整个内容放在 for 中会更好吗?循环并跳过 sapply ?我来自 Stata,这是我最了解的方式,但我正在努力学习 apply职能。

谢谢!

df <- data.frame(Price = c("$1.10", "$2.20", "($3.30)"),
RetailPrice = c("$4.40", "$5.50", "($6.50)"),
stringsAsFactors = FALSE)

to.numeric <- function(var, data){

data[,var] <- gsub("[$,]","", data[,var])
data[,var] <- sub("^\\(","-", data[,var])
data[,var] <- sub("\\)$","", data[,var])
data[,var] <- as.numeric(data[,var])

return(data[,var])
}

currency.vars <- c(
"Price",
"RetailPrice"
)

var.matrix <- sapply(currency.vars, to.numeric, data = df)

#Matrix looks as expected
View(var.matrix)
var.matrix[,1]
var.matrix[,"Price"]


for(i in 1:length(currency.vars)){

#Doesn't work
assign(paste("df[,", currency.vars[i], "]", sep = ""),
paste("var.matrix[,", i, "]", sep = ""))

}

最佳答案

这是一个等效的版本。请注意我们不需要将数据框作为参数传递给我们的函数。我们正在使用 lapply传递列:

df[currency.vars] <- lapply(
df[currency.vars],
function(x) as.numeric(sub("^\\(","-", gsub("[$,]|\\)$","", x)))
)

产生:
  Price RetailPrice
1 1.1 4.4
2 2.2 5.5
3 -3.3 -6.5

关于使用 lapply 有两个重点带数据框:
  • 我们可以直接lapply在一组选定的数据框列上
  • 我们可以直接分配lapply结果返回到数据框列

  • 这两种都是可能的,因为数据框实际上是它们的列的列表。

    关于r - 如何使用 sapply 结果更新数据框变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28835543/

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