我在R中实现了一个函数,该函数给出R中所有数字的总和,直到总和为一位。
我写了这个
ds <- function(x) {
c <- sum(floor(x / 10^(0:(nchar(x) - 1))) %% 10)
if(c>9)
{c<-ds(c)}
return(c)
}
我在dataframe列中有我的数据,我想在新列中获得总和 这是包含数字的列
records$am1
[1] 624727 262453 4237731 1079780
但是当我使用此代码
records<-records%>%mutate(V7=ds(am1))
我收到此错误代码
Warning messages:
1: In 0:(nchar(x) - 1) :
numerical expression has 4 elements: only the first used
2: In x/10^(0:(nchar(x) - 1)) :
longer object length is not a multiple of shorter object length
,对于所有行,v7的值均设置为5。
但是如果我将此功能应用为
ds(624727)
我得到正确的输出。
请帮助我将其应用于列
答案 0 :(得分:1)
在mutate()
中使用时,您的函数将一次接收所有值的向量。您的函数需要能够获取向量并返回向量。您的函数不能很好地使用多个值ds(c(624727, 1112222))
。最简单的方法是使用Vectorize()
。也许
records %>% mutate(V7=Vectorize(ds)(am1))
或者您可以在dplyr中使用按行选项
records %>% rowwise() %>% mutate(V7=ds(am1))
答案 1 :(得分:0)
尝试:
records %>%
rowwise() %>%
mutate(V7=ds(am1))