我有一个R数据,里面有11个代码。我需要运行一个循环或等效,并在每次迭代中动态地生成一个字符串,在每个迭代中,最多有3个代码块被一个+符号隔开。我怎么能这么做?
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发布于 2014-07-28 02:35:06
试试动物园包里的rollapply:
library(zoo)
rollapply(all_stockticks, 3, by = 3, paste, collapse = "+", partial = TRUE,
align = "left")给予:
symbol
[1,] "AAPL+GOOG+MSFT"
[2,] "C+JPM+GS"
[3,] "INFY+WIT+CTSH"
[4,] "V+MA" 发布于 2014-07-28 04:26:19
下面是IRanges的方法:
library(IRanges)
symbolList <- relist(as.character(all_stockticks$symbol),
breakInChunks(nrow(all_stockticks), 3))
unstrsplit(symbolList, "+")breakInChunks函数生成一个表示分区的对象。我们调用relist来形成具有这样一个分区的列表,最后调用unstrsplit (直觉上是strsplit的逆)来折叠字符串。在这里,所有的迭代都是在本机代码中进行的,所以应该是快速的。
发布于 2014-07-28 04:20:25
你可以用:
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" https://stackoverflow.com/questions/24987636
复制相似问题