我有以下向量h=c("a","b","c","d","e")
我想使用lag()
函数创建看起来像这样的数据集:
pr <- data.frame(your_github = h,
review_this1 = lag(h),
review_this2 = lag(h,2))
但是,当我使用滞后时,会发生以下情况: col2 = c(NA,“ a”,“ b”,“ c”,“ d”)和col3 =(NA,NA,“ a”,“ b”,“ c”)
但是我需要得到类似于data.frame(col1=c("a","b","c","d","e"),col2=c("b","c","d","e","a"), col3=("c","d","e","a","b"))
的结果,其中col2和col3中的值是循环的(即第二列只是第一个被1滞后的列,而第二列中的第一项是最后一个列)在st列中。)
答案 0 :(得分:3)
像这样?
library(dplyr)
h = c("a","b","c","d","e")
pr <- data.frame(your_github = h,
review_this1 = ifelse(is.na(lead(h)), h[1], lead(h)),
review_this2 = ifelse(is.na(lead(h, 2)), h[2:1], lead(h, 2)))
pr
# your_github review_this1 review_this2
#1 a b c
#2 b c d
#3 c d e
#4 d e a
#5 e a b
答案 1 :(得分:2)
使用基数R,您可以使用head
和tail
(在tio here上进行测试)来实现:
h<-letters[1:5]
pr <- data.frame(your_github = h,
review_this1 = c(tail(h, -1), head(h, -1)),
review_this2 = c(tail(h, -2), head(h, -2)))
print(pr)
输出:
your_github review_this1 review_this2
1 a b c
2 b c d
3 c d e
4 d e a
5 e a b
这个想法是使向量h
以尾部开始,并将其与head
所取向量的末尾相连,减去我们从尾部得到的长度,因此末端的长度相同数据框的每一列(向量)。
如果要循环使用最后一个值成为第一个值的向量,只需反转尾巴和头部的符号即可。