转换数据帧的功能无法正常工作

时间:2016-03-05 12:22:16

标签: r

我有一个如下所示的数据框:

    @IBAction func btnFBLoginPressed(sender: AnyObject) {
    let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
    fbLoginManager.logInWithReadPermissions(["email"], fromViewController: self, handler:{ (result, error) -> Void in
        if ((error) == nil) {
            //Show Alert Error Describing any message
        }
        else if result.isCancelled {
            print("result cancel")
        }
        else {
            let fbloginresult : FBSDKLoginManagerLoginResult = result
            if(fbloginresult.grantedPermissions.contains("email"))
            {
                self.getFBUserData()
                fbLoginManager.logOut()
            }
        }
    })
}

现在我想通过一个函数运行我的数据帧来处理5个值。

所以喜欢

 x <- c(1,2,3)
 y <- c(4,5,5)

 df <- data.frame(x,y)

现在这个有效。但是当我之后调用我的数据帧df后,我又回来了:

getRidOdNAs <- function(df){

  for (i in 1:nrow(df)){

    if(df$y[i] == 5){

       df$y[i] <- 0

    }
  }
 return(df)
 }

有什么想法我应该这样做,以便取回更改的数据框?

1 个答案:

答案 0 :(得分:3)

请注意,getRidOdNAs不会修改输入df,而是输出一个新数据框,该数据框是输入的修改版本。必须将该输出分配给变量,否则它将丢失。使用问题中的函数运行此代码确实有效:

df.orig <- df # make a copy of df and store it in df.orig

df2 <- getRidOdNAs(df)
df2 # df2 is indeed a modified version of the input, df
##   x y
## 1 1 4
## 2 2 0
## 3 3 0

identical(df.orig, df) # df unchanged
## [1] TRUE

请注意,这也有效:

df3 <- transform(df, y = replace(y, y == 5, 0))

identical(df2, df3) # check that df2 and df3 are identical
## [1] TRUE

就像这样:

df4 <- df # make a copy so we can avoid overwriting df
df4$y[df4$y == 5] <- 0  # overwrite df4

identical(df4, df2) # df4 is same as df2
## [1] TRUE