Как мне передать фрейм данных в функцию и вернуть новый фрейм данных с переставленными столбцами?

#r

#r

Вопрос:

У меня есть этот фрейм данных MRA_DF. Я хочу передать этот фрейм данных в функцию с именем AccountMRA. Отсюда я хочу удалить столбец MRA_DF $ speed, сделать столбец MRA_DF $ price первым столбцом и сделать MRA_DF $ dist вторым столбцом. Затем я хочу вернуть это. Я не могу в этом разобраться.

Этот фрейм данных = MRA_DF

     speed dist  price
1     4    2  200
2     4   10  100
3     7    4  300
4     7   22  400
5     8   16  100
6     9   10  200
  

Идеальный результат:

      price  dist
1     200 2
2     100 10
3     300 4
4     400 22
5     100 16
6     200 10
  

Комментарии:

1. Использовать MRA_DF[ ,c(3,2)]

2. Или используйте имена столбцов вместо индексов: MRA_DF[c("price", "dist")] .

Ответ №1:

Используя пакет dplyr, вы можете создать функцию, которая может принимать столбец для удаления и список имен столбцов в определенном порядке:

 library(dplyr)

# create dataframe
MRA_DF = data.frame(speed = c(4, 4, 7, 7, 8, 9), dist = c(2, 10, 4, 22, 16, 10), price = c(200, 100, 300, 400, 100, 200))

# AccountMRA takes in a dataframe, column order, and a column to drop
#' @param colorder --> list of column names in specific order
#' @param todrop --> column name to drop
#' @param data1 --> dataframe to manipulate
#' @return --> return formatted dataframe
AccountMRA <- function(data1, colorder = c('price', 'dist'), todrop = 'speed'){
    toreturn <- as.data.frame(data1
                        %>% dplyr::select(-eval(parse(text = todrop))))
    return(toreturn[, colorder])
}

AccountMRA(MRA_DF, colorder = c('price', 'dist'), todrop = 'speed')

# has the following output:
#   price dist
# 1   200    2
# 2   100   10
# 3   300    4
# 4   400   22
# 5   100   16
# 6   200   10
  

Ответ №2:

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

 MRA_DF = data.frame(speed = c(4, 4, 7, 7, 8, 9), dist = c(2, 10, 4, 22, 16, 10), price = c(200, 100, 300, 400, 100, 200))

 df <- MRA_DF[,c("price","dist")]

# df
#  price dist
#1   200    2
#2   100   10
#3   300    4
#4   400   22
#5   100   16
#6   200   10