gpt4 book ai didi

r - 在具有字符和数字变量的 data.frame 上使用 Apply

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

我正在尝试将一些现有的基于循环的代码转换为使用 R 的应用函数。根据该项目的规范,不允许使用其他库(例如 plyr)。

这是目前的运作方式。

  Type Pressure Temp
1 Iron 100 10
2 Copper 200 20
for(i in 1:rnow(data))
{
if(data$Type[i] == "Iron")
Output[i] <- IronCalculation(data$Pressure[i]...)
else if(data$Type[i] == "Copper")
Output[i] <- CopperCalculation(data$Pressure[i]...)
}

我想将其转换为使用 apply() 函数。我尝试了多种方法,但我只是卡住了,因为 apply() 将所有变量值转换为字符,因此无法对这些变量进行数字编译。原始数据集有150+个变量,其中很多是字符串/字符。

作为测试,我尝试了以下方法。显然它失败了。我可以使用 as.numeric() 将字符变量转换为数字,但每行有 8000 多行和 20 个变量。看起来像是在浪费 CPU 周期。

apply(data[1,], 2, function(x) {
if(x['Type'] == "Iron")
Output <- IronCalculation(x['Type'],x['Pressure']...)
})

有人可以帮忙吗?如何更改此循环以使用应用函数?

最佳答案

尝试

apply(data, 1,  
function(x) {
if (x['Type'] == 'Iron')
IronCalculation(as.numeric(x['Pressure']), as.numeric(x['Pressure']))
else if (x['Type'] == 'Copper')
CopperCalculation(as.numeric(x['Pressure']), as.numeric(x['Pressure']))
}
)

你会得到一个向量。 as.numeric() 是必需的,因为 PressureTemp 在与 Type 一起传递给你的匿名函数。

编辑:但是按照@Justin 的建议使用 switch() 而不是嵌套的 if 会更加优雅。

关于r - 在具有字符和数字变量的 data.frame 上使用 Apply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12057471/

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