【问题标题】:Apply function not working in R应用功能在 R 中不起作用
【发布时间】:2016-08-28 18:23:37
【问题描述】:

我创建了一个数据框:

fy <- c(2010,2011,2012,2010,2011,2012,2010,2011,2012)
company <-c("Apple","Apple","Apple","Google","Google","Google","Microsoft","Microsoft","Microsoft")
revenue <- c(65225,108249,156508,29321,37905,50175,62484,69943,73723) 
profit <- c(14013,25922,41733,8505,9737,10737,18760,23150,16978)
companiesData <- data.frame(fy, company, revenue, profit)

我正在尝试使用 apply 命令创建新列,但出现错误:

companiesData$Margin<-apply(companiesData,1,function(x){(x[4]/x[3])*100})

x[4]/x[3] 中的错误:二元运算符的非数字参数

谁能告诉我这里的错误是什么?

【问题讨论】:

  • 你为什么要循环播放?这不是你需要的吗? 100*(companiesData$profit/companiesData$revenue)

标签: r apply


【解决方案1】:

错误在于 apply 将其第一个参数强制转换为矩阵,并且由于 companiesData 具有数字和非数字变量,所有变量都转换为非数字导致操作 x/y 无效,因为除法没有为非数字数据定义。

解决方案:在这种情况下您不需要apply

companiesData$Margin <- 100 * companiesData$profit / companiesData$revenue

或等效

companiesData <- within(companiesData, Margin <- 100 * profit / revenue)

做你想做的。

【讨论】:

  • 为什么你的第二个选项比第一个更好?是否有性能差异或任何其他优势?据我所知,两者之间的可读性大致相同 - 虽然对apply 进行了很好的解释
  • @Sotos 性能没有区别。这是风格和可读性的问题。
猜你喜欢
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
相关资源
最近更新 更多