выбор столбцов после именованных столбцов

#r #dataframe

#r #фрейм данных

Вопрос:

У меня есть фрейм данных следующего вида в R

Первый a b c Второй a b c
3 8 1 7 6 8
5 9 4 2 8 5

Я пытаюсь написать что-то, что выбирает три столбца, следующие за «Первым» и «Вторым», и помещает их в новые фреймы данных под названием «Первый» и «Второй» соответственно. Я подумываю об использовании приведенной ниже стратегии (где df — это фрейм данных, который я описал выше), но не уверен, как сделать так, чтобы R принимал столбцы, следующие за указанными мной

 names <- c("First", "Second")
for (i in c){
     i <- (something to specify the 3 columns following df$i)
}
 

Ответ №1:

Вариант состоит split.default в том, чтобы разделить data.frame на a list из data.frame s

 split.default(df, cumsum(names(df) %in% names))
#
 #r #dataframe

 #r #фрейм данных

Вопрос:

У меня есть фрейм данных следующего вида в R
Первый a b c Второй a b c
3 8 1 7 6 8
5 9 4 2 8 5
Я пытаюсь написать что-то, что выбирает три столбца, следующие за "Первым" и "Вторым", и помещает их в новые фреймы данных под названием "Первый" и "Второй" соответственно. Я подумываю об использовании приведенной ниже стратегии (где df - это фрейм данных, который я описал выше), но не уверен, как сделать так, чтобы R принимал столбцы, следующие за указанными мной
 names <- c("First", "Second")
for (i in c){
     i <- (something to specify the 3 columns following df$i)
}
 

Ответ №1:

Вариант состоит split.default в том, чтобы разделить data.frame на a list из data.frame s

1`
# First a b c
#1 NA 3 8 1
#2 NA 5 9 4
#
#

#r #dataframe

#r #фрейм данных

Вопрос:

У меня есть фрейм данных следующего вида в R

Первый a b c Второй a b c
3 8 1 7 6 8
5 9 4 2 8 5

Я пытаюсь написать что-то, что выбирает три столбца, следующие за "Первым" и "Вторым", и помещает их в новые фреймы данных под названием "Первый" и "Второй" соответственно. Я подумываю об использовании приведенной ниже стратегии (где df - это фрейм данных, который я описал выше), но не уверен, как сделать так, чтобы R принимал столбцы, следующие за указанными мной

 names <- c("First", "Second")
for (i in c){
     i <- (something to specify the 3 columns following df$i)
}
 

Ответ №1:

Вариант состоит split.default в том, чтобы разделить data.frame на a list из data.frame s

2`
# Second a b c
#1 NA 7 6 8
#2 NA 2 8 5

Выражение cumsum(...) создает индексы, в соответствии с которыми следует группировать и разделять столбцы.


Пример данных

 df <- read.table(text = "First  a   b   c   Second  a   b   c
'' 3    8   1   ''  7   6   8
'' 5    9   4   ''  2   8   5", header = T, check.names = F)
 

Ответ №2:

Вы можете получить позицию names вектора в именах столбцов данных и подмножество следующих 3 столбцов из него.

 names <- c("First", "Second")
inds <- which(names(df) %in% names)
result <- Map(function(x, y) df[x:y], inds   1, inds   3)
result

#[[1]]
#  a b c
#1 3 8 1
#2 5 9 4

#[[2]]
#  a b c
#1 7 6 8
#2 2 8 5
 

Чтобы создать отдельные фреймы данных, вы можете присвоить списку имя и использовать list2env

 names(result) <- names
list2env(result, .GlobalEnv)