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