R: выделите каждые n строк фрейма данных и поместите каждые n строк в элемент списка - PullRequest
1 голос
/ 30 сентября 2019

Как и предлагалось в заголовке, я бы хотел взять каждые n строк кадра данных и поместить каждый блок в список.

У меня есть некоторые данные уровня пути, сложенные в кадре данных, и я хочу разделить каждый путь на элемент списка.

Данные, которые у меня есть:

df3 <- as.data.frame(matrix(c(1,1,1,2,2,2,3,3,3,1,2,3,1,2,3,1,2,3,5,6,7,4,6,5,6,7,6), nrow=9, ncol=3))
names(df3) <- c("path","month", "data")
print(df3)
  path month data
1    1     1    5
2    1     2    6
3    1     3    7
4    2     1    4
5    2     2    6
6    2     3    5
7    3     1    6
8    3     2    7
9    3     3    6

Желаемый результат:

myList <- list()
myList[[1]]<- as.data.frame(matrix(c(1,1,1,1,2,3,5,6,7), nrow=3, ncol=3))
myList[[2]]<- as.data.frame(matrix(c(2,2,2,1,2,3,4,6,5), nrow=3, ncol=3))
myList[[3]]<- as.data.frame(matrix(c(3,3,3,1,2,3,6,7,6), nrow=3, ncol=3))

print(myList)
> print(myList)
[[1]]
  V1 V2 V3
1  1  1  5
2  1  2  6
3  1  3  7

[[2]]
  V1 V2 V3
1  2  1  4
2  2  2  6
3  2  3  5

[[3]]
  V1 V2 V3
1  3  1  6
2  3  2  7
3  3  3  6

Ответы [ 2 ]

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

Мы можем использовать split

lst1 <- split(df3, df3$path)
lst1
#$`1`
#  path month data
#1    1     1    5
#2    1     2    6
#3    1     3    7

#$`2`
#  path month data
#4    2     1    4
#5    2     2    6
#6    2     3    5

#$`3`
#  path month data
#7    3     1    6
#8    3     2    7
#9    3     3    6
2 голосов
/ 30 сентября 2019

Может быть сделано с использованием

lapply(seq(1,9,3),function(x) df3[x:(x+2),])

[[1]]
  V1 V2
1  1  5
2  1  6
3  1  7

[[2]]
  V1 V2
4  2  4
5  2  6
6  2  5

[[3]]
  V1 V2
7  3  6
8  3  7
9  3  6

Таким образом, отображаемые вами данные и то, что содержится в df3, не совпадают. Тем не менее, это работает для обоих.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...