【问题标题】:R programming Sum data frameR编程求和数据框
【发布时间】:2017-03-17 16:36:24
【问题描述】:

我有一个使用 R 语言的代码,我想对所有数据框求和(df$number 是未列出的结果为 'res')

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

求和“总数”的具体代码是什么?

谢谢。

【问题讨论】:

    标签: r dataframe sum digits


    【解决方案1】:

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

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

    所以,如果你输入sum(setdiff(1:50, as.numeric(names(total)))),你会得到你正在寻找的 118。


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

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

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

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

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

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

    其中which() 获取值

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

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

    【讨论】:

    • 感谢 TheBiro 的回答,特别是关于您使用 unique() 和 which() 的解释
    • 还要记住,当你想更新一个变量时,你必须使用 &lt;- 就像 setdiff 一样:total &lt;- setdiff(1:50, total)。当您只需要在控制台上打印结果时,执行一个函数而不将其分配给一个变量是很有用的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多