#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)