2017-10-12 3 views
0

大きなグループのデータに対して、かなり基本的な記述統計を作成しています。私は必要な統計を試して取得する関数を書いています。データフレームに新しい行を作成します.1つの要素は因子であり、もう1つの数値です。

データフレームの1つの要素が要素(「合計」)であり、他の要素が数値(他の行の合計)である新しい行を作成したいとします。ここで

は、このコードの例です:

df <- data.frame(
pop = c(201:250), 
age = factor(rep(c("20-29", "30-39", "40-49", "50-59", "60-69"), 10)), 
year = factor(rep(c(2012, 2013, 2014, 2015, 2016), 10))) 

が集約

DiabMort_fun <- function(VDRpop, VDRage, nyrs, nrows) { 
Aggregate_fun <- function(pop, ag1, nyrs, nrows, names_list) { 
popbylist <- data.frame(aggregate(pop, by = list(Category = ag1), FUN=sum)) 
popbylist$mean <- (popbylist$x/nyrs) 
colnames(popbylist) = names_list 
popbylist[nrows,] <- c("total", sum(popbylist[2]), sum(popbylist[3])) 
return(popbylist) 
} 


VDRbyage <- Aggregate_fun(pop = VDRpop, ag1 = VDRage, nyrs = nyrs, nrows = nrows, 
         names_list = c("Age", "Num_pop_VDR", "Mean_pop_VDR")) 
return(VDRbyage) 
} 

実行にこの機能

test <- DiabMort_fun(VDRpop = df$pop, df$age, 
       nyrs = 5, nrows = 5) 

を行う関数を書くのデータフレームを作成します。 I r国連これは、私は、次のエラーメッセージを得る:

警告メッセージ: 無効因子レベルは、NAが

「合計が生成: [<-.factor*tmp*、ISEQ、値= "合計")で「(合計」、11275、2255)

はこの楽しいで新しい行を作成する方法を誰もが知っている欄は、今、私はそれが希望何C(NA、11275、2255)

は、cです」因子レベルを「合計」を含むように拡大するか?関数内の関連するコードは次のとおりです。あなたが年齢と年の列の要素を作成する必要はありません

popbylist[nrows,] <- c("total", sum(popbylist[2]), sum(popbylist[3])) 

おかげ

+0

明らかに不適切なExcelスプレッドシートのようにRの作業をしようとしているように思えます。 – jsb

+0

data.frameの下部に、そのような合計を入れることはできません。 data.frameから区切られた合計を計算する必要があります。オブジェクト型は変数(列)ごとに定義され、行では定義されません。 – jsb

答えて

1

。そのステップをスキップして、最初のdata.frame()コールにstringsToFactors = FALSEを設定すると、関数が機能するはずです。

現在の順序とデータ型を維持したい場合は、要約行を1行のデータフレームに変換し、それをもう1つのフレームにバインドすることができます。

temp <- data.frame("total", sum(popbylist[2]), sum(popbylist[3])) 
colnames(temp) = names_list 
popbylist <- rbind(popbylist, temp) 
関連する問題