相当于R中字符串的cumsum

Phi*_*hil 8 r

我正在寻找一种方法来做一个相当于R中的累积和的字符串/字符格式的文本而不是数字.应连接不同的文本字段.

例如,在数据框"df"中:

A列包含输入,B列包含所需结果.

  A        B
1 banana   banana 
2 boats    banana boats
3 are      banana boats are
4 awesome  banana boats are awesome
Run Code Online (Sandbox Code Playgroud)

目前我通过以下循环解决这个问题

df$B <- ""

for(i in 1:nrow(df)) {
    if (length(df[i-1,"A"]) > 0) {
        df$B[i] <- paste(df$B[i-1],df$A[i])
    } else {
        df$B[i] <- df$A[i]
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否存在更优雅/更快的解决方案.

Jul*_*ora 11

(df$B <- Reduce(paste, as.character(df$A), accumulate = TRUE))
# [1] "banana"     "banana boats"      "banana boats are"    "banana boats are awesome"
Run Code Online (Sandbox Code Playgroud)

  • @Roland它不仅仅是一个for循环.还有很多事情可以解释速度的提升.首先,你有强制调用(参见`?forceAndCall`.更重要的是,函数`Reduce`已被编译为字节码.任何编译的代码都将胜过"手工制作"for-loop.所以称它为语法糖是对功能不公平. (3认同)