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))
更直观。
我有一个使用 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))
更直观。