R中列的位数总和

时间:2019-04-12 19:40:05

标签: r

我在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)

我得到正确的输出。

请帮助我将其应用于列

2 个答案:

答案 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))