【问题标题】:How do i convert the following for loop with apply function?如何使用 apply 函数转换以下 for 循环?
【发布时间】:2015-12-20 06:05:19
【问题描述】:

以下 for 循环查找重复的标签并将前缀连接到它(以使标签唯一)。前缀是前一行的标签(部分标签)。

for(i in 1:nrow(MStar_KR))
 {
   if (MStar_KR[i,1]=="Year over Year") 
   {
     MStar_KR[i,1]<- MStar_KR[i-1,1] %s+% "_" %s+% MStar_KR[i,1]
   }
}

我是 R 的初学者。是否可以同样使用 apply 函数?谢谢

【问题讨论】:

  • 并且数据帧具有以下结构 (dput(head(MStar_KR,5))): structure(list(2011 = c("106,916", "46.9", "20,286", "19.0 ", "15,855"), 2012 = c("104,507", "48.1", "20,443", "19.6", "16,604"), 2013 = c("99,751", "48.6", "18,777", "18.8 ", "16,483"), 2014 = c("92,793", "50.0", "17,790", "19.2", "12,022"), 2015 = c("83,795", "50.3", "15,628", "18.7 ", "14,210")), .Names = c("2011", "2012", "2013", "2014", "2015"), row.names = c("Revenue USD Mil", "Gross Margin % ", "营业收入百万美元", "营业利润率%", "净收入百万美元"), class= "data.frame")

标签: for-loop apply


【解决方案1】:

你应该可以做这样的事情:

MStar <- function(x){
if (MStar_KR[i,1]=="Year over Year") {
       MStar_KR[i,1]<- MStar_KR[i-1,1] %s+% "_" %s+% MStar_KR[i,1]}
}

MStar_KR <- sapply(MStar_KR, MStar(x))

【讨论】:

  • 非常感谢您的帮助。 i 是一个循环的虚拟变量,它应该留在 function(x) 语句中吗?无论如何,我尝试过,并在 sapply 行中出现以下错误: if (MStar_KR[i, 1] == "Year over Year") { : 需要 TRUE/FALSE 的缺失值
  • @anycorp 您是否要在整个data.frame 上验证这一点?
  • 是的,“i”虚拟变量将循环遍历数据框中的所有卷
  • 最好添加dput(head(df, 10)),这样我们就可以得到一些数据。
  • 我使用了 make.unique 并解决了上述问题。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多