繁体   English   中英

创建一个if else语句以在R中使用循环进行四舍五入的问题

[英]Issues creating an if else statement for rounding with a loop in 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

关键是创建一个空的数据框并通过使用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] }}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM