如何遍历数据框中的列

时间:2019-09-18 20:30:48

标签: r dataframe lag

我有以下向量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列中。)

2 个答案:

答案 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,您可以使用headtail(在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所取向量的末尾相连,减去我们从尾部得到的长度,因此末端的长度相同数据框的每一列(向量)。

如果要循环使用最后一个值成为第一个值的向量,只需反转尾巴和头部的符号即可。