读取.csv文件并在其上调用函数

时间:2015-12-29 07:41:14

标签: r

我在.csv中阅读并希望对其执行一项功能。所以我这样做:

我想打电话的功能

award_test <- function(df) {

  df$rating_weging <- 0

  for (rows in 1:nrow(df)){
   if((df$won[rows] == "W") && (df$verschil[rows] > 0.6)){
    df$rating_weging[rows] <- 0.75
  }
 }
return(df)
}

读入.csv文件并在其上执行该功能。

set <- function(){

setwd("dir")
   df <- read.csv("club_Barcelona.csv", header = T)

   #perform function
   award_test(df)

   write.csv(df,"club_Barcelona.csv")  
   setwd("dir")
 }

但是我这样做我的df并没有改变。我没有看到列rating_weging ...

对这里出了什么问题的想法?

2 个答案:

答案 0 :(得分:0)

award_test内呼叫set功能时,不保存其输出。正如@Ven Yao指出的那样,你应该对你的set函数做一个简单的改变:

set <- function(){

setwd("dir")
   df <- read.csv("club_Barcelona.csv", header = T)

   #perform function
   df <- award_test(df)

   write.csv(df,"club_Barcelona.csv")  
   setwd("dir")
 }

答案 1 :(得分:0)

这里的问题是你没有保存功能的输出。 正如其他答案所述,df <- award_test(df)应该可以解决问题。

与问题没有特别关联的部分,但可能对OP有用

由于OP似乎对R来说相对较新,我想指出的是,与循环所有行相比,有更清晰(可能更快)的方法。

例如,ifelse在这种情况下可能很有用。

df$rating_weging = ifelse((df$won == 'W' & df$verschil > 0.6),0.75,0)

如果满足条件,则分配特定值,在这种情况下为0.75,如果不满足,则分配另一个值。 (在这种情况下为0)。

您可以使用此语句替换整个函数体!

在很多情况下,R的循环往往很慢。

看看这个更多: http://www.r-bloggers.com/for-loops-and-how-to-avoid-them/