简体   繁体   中英

R programming Sum data frame

i have a code using R language, i want to sum all data frame (df$number is unlist result in 'res')

total result is = [1] 1 3 5 7 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)

i'm using sum(total) but the result of summary is '155' it is not the right answer, cause the right answer is '118'

what the spesific code to sum the 'total'?

thank you.

I ran your code and I think you may be confused on what you want to sum.

You setdiff contains the values 1 3 5 7 9 20 31 42 which sum is 118.

So, if you do sum(setdiff(1:50, as.numeric(names(total)))) , you'll get the 118 you are looking for.


Your total variable is different from this. Let me explain what you are doing and what I think you should do.

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

When you table() , you get each unique value from the vector, and the number of how many times this number appears on your vector.

And when you get the names() of this table, you get each of these unique values as a character , that's why you are setting as.numeric .

But the function unique() do this job for you, he extracts uniques values from a vector.

Here's what you can do: total <- unique(df$number[which(df$number <= 50)])

Where which() get the ID's of values <= 50, and unique extracts unique values of these ID's.

And finally: sum(setdiff(1:50, total)) that sums all the values from 1 to 50 that are not in your total vector.

And in my opinion, sum(setdiff(total, 1:50)) its more intuitive.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM