相当于R中字符串的cumsum

时间:2016-02-12 12:22:30

标签: r

我正在寻找一种方法来处理R中的字符串/字符格式文本而不是数字的累积和。应该连接不同的文本字段。

E.g。在数据框中" df":

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

Intent intent = new Intent(MainActivity.this, LayoutService.class);
        intent.putExtra(LayoutService.ORIENTATION,
                ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        startService(intent);

目前我正在通过以下循环解决此问题

  A        B
1 banana   banana 
2 boats    banana boats
3 are      banana boats are
4 awesome  banana boats are awesome

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

3 个答案:

答案 0 :(得分:10)

android:ems="(size)"

答案 1 :(得分:4)

我不知道它是否更快,但至少代码更短:

sapply(seq_along(df$A),function(x){paste(A[1:x], collapse=" ")})

感谢Rolands的评论,我意识到这是for循环可能有用的罕见事件之一,因为它为我们节省了重复的索引。它与OP不同,因为它从2开始,省去了forloop中if语句的需要。

res <- c(NA, length(df1$A))
res[1] <- as.character(df1$A[1])
for(i in 2:length(df1$A)){
   res[i] <- paste(res[i-1],df1$A[i])
 }
res

答案 2 :(得分:4)

我们可以尝试

 i1 <- sequence(seq_len(nrow(df1)))
 tapply(df1$A[i1], cumsum(c(TRUE,diff(i1) <=0)),
                     FUN= paste, collapse=' ')

或者

 i1 <- rep(seq(nrow(df1)), seq(nrow(df1)))
 tapply(i1, i1, FUN= function(x) 
          paste(df1$A[seq_along(x)], collapse=' ') )