在R中使用循环创建用于舍入的if else语句的问题

时间:2016-02-15 22:19:17

标签: r

我正在为R类的代码苦苦挣扎。我们正在研究循环,如果它们的小数大于.6,我应该在数据框内对数字进行舍入,如果小数小于0.4则向下舍入,如果在它们之间则单独留下。我无法让它发挥作用。

数据帧:

 set.seed(12)
 df<-data.frame(rgamma(n=20,shape=4,scale=2),runif(n=20),rnorm(n=20),paste("Observation",1:20))
 colnames(df)<-c("V1","V2","V3","Obs")

以下是我尝试过的代码:

rounddf<-rep(nrow(df),ncol(df)-1) 
for (i in 1:ncol(df)-1) 
{
for (j in 1:nrow(df)) 
 {
  if (i>0.6)
   {rounddf[i]<-ceiling(df[i]) 
    } else if (i<0.4){rounddf[i]<-floor(df[i])}
  }
}
rounddf

1 个答案:

答案 0 :(得分:1)

关键是要创建一个空数据框,并使用for循环中的i和j来填充它,以便在新数据框中索引这些值。 这段代码将完全符合您的要求。您还必须确保将数字减少为分数,以便隐藏大于1的部分。然后,您可以使用if else语句来评估它们。

   set.seed(12)
   df<-data.frame(rgamma(n=20,shape=4,scale=2),
   runif(n=20),rnorm(n=20),paste("Observation",1:20))
   colnames(df)<-c("V1","V2","V3","Obs")


   newdf <-data.frame( V1=rep(0,20), V2=rep(0,20), V3=rep(0,20))



   df <- df[,1:3, drop=TRUE]

    for (i in 1:ncol(df)) 
   {
   for (j in 1:nrow(df)) 
   {n <- df[j,i]
   whole <- floor(df[j,i])
   fraction <- n-whole
   if(fraction > .60)  newdf[j,i] <- ceiling(df[j,i])
   if(fraction < .40) newdf[j,i] <- floor(df[j,i])
   if((fraction > .4) & (fraction < .6)) newdf[j,i] <- df[j,i] }}