2017-03-17 12 views
1

iはR言語を使用してコードを持っているが、私はすべてのデータ・フレームを合計するRプログラミング和データフレーム

合計結果は= [1] 1 3 5 7(DFの$番号は 'のRES' で非公開に結果です) 9 20 31 42

digits <- function(x){as.integer(substring(x, seq(nchar(x)), seq(nchar(x))))} 
generated <- function(x){ x + sum(digits(x))} 
digitadition <- function(x,N) { c(x, replicate(N-1, x <<- generated(x))) } 
res <- NULL 
for(i in 0:50){ 
for(j in 2:50){ 
tmp <- digitadition(i,j) 
IND <- 50*(i-1) + (j-1) - (i-1) #to index results 
res[IND] <- tmp[length(tmp)] 
} 
} 

df <- data.frame(number = unlist(res), generator=rep(1:50, each=49), N=2:50) 

total <- table(df$number)[as.numeric(names(table(df$number)))<=50] 

setdiff(1:50, as.numeric(names(total))) 

sum(total) 

正しい答えがspesificコードを合計する何118 '

ある原因、それが正しい答えではない私はsum(total)を使用していますが、要約の結果は「155」です合計'?

ありがとうございました。

答えて

0

私はあなたのコードを実行しました。あなたはあなたが合計したいものに混乱するかもしれないと思います。

あなたsetdiffは、あなたがsum(setdiff(1:50, as.numeric(names(total))))をすれば、あなたが探している118を得るでしょう、だから、118

である合計値1 3 5 7 9 20 31 42が含まれています。


totalの変数はこれとは異なります。あなたがしていることと、あなたがすべきことを説明しましょう。

あなたのコード:total <- table(df$number)[as.numeric(names(table(df$number)))<=50]]

あなたtable()、あなたはベクトルから一意の各値、およびこの数は、あなたのベクトルに表示される回数の数を取得する場合。

この表のnames()を入手すると、characterという固有の値が得られます。そのため、as.numericを設定しています。

しかし、この機能をunique()が実行すると、ベクトルからユニーク値が抽出されます。

はここで何ができるかです:which()は、ID値< = 50のの、そしてユニーク抽出し、これらのIDの一意の値を取得total <- unique(df$number[which(df$number <= 50)])

最後にベクトルに含まれていない1から50までのすべての値を合計するsum(setdiff(1:50, total))です。

私の意見では、sum(setdiff(total, 1:50))は、より直観的です。

+0

特にあなたの説明については、unique()とwhich()を使っていただきありがとうございます。 – alexaxeel

+0

また、変数を更新する場合は、setdiff: 'total <--setdiff (1:50、合計) '。変数に代入することなく関数を実行するのは、結果をコンソールに出力するだけでよい場合に便利です。 – TheBiro