我正在为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
答案 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] }}