【发布时间】:2018-09-05 06:25:44
【问题描述】:
我有一个向量s,在“for 循环”中,我需要先打印前两个值 (1,2),然后是 (2,3),然后是 (3,4),依此类推。
s <- c(1, 2, 3, 4 ,5)
我能想到的只有
for (i in s) {
print(i)
}
它一次只打印一个元素,有人可以帮助这个小代码。
【问题讨论】:
我有一个向量s,在“for 循环”中,我需要先打印前两个值 (1,2),然后是 (2,3),然后是 (3,4),依此类推。
s <- c(1, 2, 3, 4 ,5)
我能想到的只有
for (i in s) {
print(i)
}
它一次只打印一个元素,有人可以帮助这个小代码。
【问题讨论】:
我们可以将库zoo中的rollaplly与width = 2一起使用,因为我们需要一次打印2个元素,并且我们用“,”将这些元素连接在一起。
library(zoo)
rollapply(s, 2, function(x) paste0(x, collapse = ","))
#[1] "1,2" "2,3" "3,4" "4,5"
【讨论】:
df$col 即rollapply(df$col, 2, function(x) paste0(x, collapse = ","))
你可以通过
s <- c(1, 2, 3, 4 ,5)
for (i in 1:(length(s)-1)){
print(paste('(', s[i], ",", s[i+1], ")", sep = ""))
}
我希望这会有所帮助!
【讨论】:
for(i in 1:(length(s)-1)) print(s[c(i:(i+1))])
【讨论】:
for(i in 1:(dim(df)[1]-1)) print(df$col[c(i:(i+1))])(这是假设您必须使用for 循环。没有它有更好的方法来实现)
paste(df$col,lead(df$col))[-dim(df)[1]] 将导致"1 2" "2 3" "3 4" "4 5"
paste0("(",df$col,", ",lead(df$col),")")[-dim(df)[1]]
另一种解决方案:
sapply(seq_along(s)[-length(s)], function(i) paste(s[i], s[i+1], sep=", "))
[1] "1, 2" "2, 3" "3, 4" "4, 5"
【讨论】: