在函数中设置时,数据帧行/列的重新排序不起作用

时间:2019-05-02 21:12:55

标签: r function dataframe

我想创建一个对数据框的行和列重新排序的函数。但是,它不起作用,但是,如果我尝试手动对数据框进行重新排序,一切都很好,因此我必须对如何重新排序有基本的了解。

这是我的功能:

CorrOrder <- function (df, new_df) {

  new_order = c(19:24, 7:12, 1:6, 13:18)

  new_df <- df[new_order, new_order]
}

#This does absolutely nothing and doesn't return an error

CorrOrder(AllData[["DataUnsorted"]][["DataFrameZXWY"]],
           AllData[["DataFrameWXYZ"]])

这很好用:

AllData[["DataFrameWXYZ"]] <- AllData[["DataUnsorted"]][["DataFrameZXWY"]][c(19:24, 7:12, 1:6, 13:18), c(19:24, 7:12, 1:6, 13:18)]

这将创建一些示例数据:

data.frame(replicate(24,sample(0:1,24,rep=TRUE)))

2 个答案:

答案 0 :(得分:1)

我认为有两件事出了错:

  • new_df不应是函数的输入值,而应是输出值。
  • 您的函数没有输出值。

尝试一下:

CorrOrder <- function(df) {
  new_order = c(19:24, 7:12, 1:6, 13:18)
  new_df <- df[new_order, new_order]
  return(new_df)
}

CorrOrder(AllData[["DataUnsorted"]][["DataFrameZXWY"]])

答案 1 :(得分:1)

您的函数未返回任何内容。例如,这也不会产生任何结果:

library(tidyverse)
df <- tibble(a = c(1, 2, 3))
test_function <- function(df) {
  df_new <- 
    df %>% 
    mutate(a = a + 2)
}
test_function(df)

取出新的变量名和箭头,您的代码可能会起作用:

test_function <- function(df) {
  df %>% 
    mutate(a = a + 2)
}

或者:

test_function <- function(df) {
  df_new <- 
    df %>% 
    mutate(a = a + 2)
  return(df_new)
}