R编程求和数据框

R programming Sum data frame

我有一个使用 R 语言的代码,我想对所有数据帧求和(df$number 是 'res' 中的 unlist 结果)

总结果为 = [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)

我正在使用 sum(total) 但摘要的结果是“155”,这不是正确答案,因为正确答案是“118”

求和 'total' 的具体代码是什么?

谢谢。

我 运行 您的代码,我认为您可能对要求和的内容感到困惑。

setdiff 包含值 1 3 5 7 9 20 31 42,总和为 118。

所以,如果您这样做 sum(setdiff(1:50, as.numeric(names(total)))),您将得到您正在寻找的 118。


您的 total 变量与此不同。让我解释一下你在做什么以及我认为你应该做什么。

您的代码:total <- table(df$number)[as.numeric(names(table(df$number)))<=50]]

当您 table() 时,您从向量中获取每个唯一值,以及该数字在您的向量中出现的次数。

并且当您获得此 table 的 names() 时,您将获得这些唯一值中的每一个作为 character,这就是您设置 as.numeric 的原因。

但是函数 unique() 为您完成这项工作,他从向量中提取唯一值。

您可以执行以下操作:total <- unique(df$number[which(df$number <= 50)])

其中 which() 获取值 <= 50 的 ID,unique 提取这些 ID 的唯一值。

最后:sum(setdiff(1:50, total)) 将不在 total 向量中的从 1 到 50 的所有值相加。

在我看来,sum(setdiff(total, 1:50)) 更直观。