首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环R数据以生成条件字符串

循环R数据以生成条件字符串
EN

Stack Overflow用户
提问于 2014-07-28 02:14:21
回答 3查看 53关注 0票数 2

我有一个R数据,里面有11个代码。我需要运行一个循环或等效,并在每次迭代中动态地生成一个字符串,在每个迭代中,最多有3个代码块被一个+符号隔开。我怎么能这么做?

代码语言:javascript
复制
all_stockticks <-   
data.frame(symbol=c("AAPL","GOOG","MSFT","C","JPM","GS","INFY","WIT","CTSH","V","MA")
)

In iteration-1 output would be str=AAPL+GOOG+MSFT
In iteration-2 output would be str=C+JPM+GS
In iteration-3 output would be str=INFY+WIT+CTSH
In iteration-4 output would be str=V+MA
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-28 02:35:06

试试动物园包里的rollapply

代码语言:javascript
复制
library(zoo)
rollapply(all_stockticks, 3, by = 3, paste, collapse = "+", partial = TRUE, 
            align = "left")

给予:

代码语言:javascript
复制
     symbol          
[1,] "AAPL+GOOG+MSFT"
[2,] "C+JPM+GS"      
[3,] "INFY+WIT+CTSH" 
[4,] "V+MA"    
票数 0
EN

Stack Overflow用户

发布于 2014-07-28 04:26:19

下面是IRanges的方法:

代码语言:javascript
复制
library(IRanges)
symbolList <- relist(as.character(all_stockticks$symbol),
                     breakInChunks(nrow(all_stockticks), 3))
unstrsplit(symbolList, "+")

breakInChunks函数生成一个表示分区的对象。我们调用relist来形成具有这样一个分区的列表,最后调用unstrsplit (直觉上是strsplit的逆)来折叠字符串。在这里,所有的迭代都是在本机代码中进行的,所以应该是快速的。

票数 1
EN

Stack Overflow用户

发布于 2014-07-28 04:20:25

你可以用:

代码语言:javascript
复制
 n <- nrow(all_stockticks)
 c(by(all_stockticks[,1], as.numeric(gl(n,3,n)), FUN=paste,collapse="+"))
              1                2                3                4 
 #"AAPL+GOOG+MSFT"       "C+JPM+GS"  "INFY+WIT+CTSH"           "V+MA" 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24987636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档