[英]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.