Как перебрать столбцы в фрейме данных - PullRequest
0 голосов
/ 18 сентября 2019

У меня есть следующий вектор 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 зациклены (т.е. 2-й столбец - это только 1-й, который отстает на 1, но 1-й элемент во 2-м - это последний элемент в St-столбце).

Ответы [ 2 ]

3 голосов
/ 19 сентября 2019

Как то так?

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

2 голосов
/ 19 сентября 2019

С помощью базы R вы можете достичь этого с помощью head и tail (тест на здесь ):

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 минус то, что мы получили из хвоста, поэтому мы имеем одинаковую длину в конце для каждого столбца (вектора)кадра данных.

Если вы хотите циклически преобразовать вектор с последним значением, становящимся первым, просто поменяйте местами знаки в хвосте и голове.

...