首页 > 解决方案 > 一次从变量中删除一个数据元素(值)并在 R 中执行函数

问题描述

我正在尝试在 R 中编写允许我执行以下操作的代码:

  1. 从较大数据框中的变量(列)中删除第一个数据元素(值)。

  2. 在完整数据帧上运行一个函数(删除步骤 1 中的数据元素)。

  3. 对列中的其余数据元素重复此过程。

我已经尝试了以下代码并运行它而没有收到错误。然而,从结果中可以清楚地看出,数据元素并没有按照需要被连续删除。

对于上下文,我的数据框 (df) 是 50x18,我尝试从第 2 步运行的函数是多重插补函数。这是我的代码:

procedure <- function(x) {
  x <- NA
  mice(df, m = 5, maxit = 5, method = "norm", pred = pred_matrix, seed = 2019)
}

results <- lapply(df$variable, procedure)

根据需要,此代码生成一个包含 50 组输出的列表。但是,它似乎在相同的数据帧上执行了 50 次该过程。因此,我的问题是:为什么我的代码没有遍历数据变量中的每个元素并在运行过程之前将其删除?我不是要缩小数据框(删除一行)。相反,对于变量中的每个值 (x),我想将值设为“NA”(丢失),然后执行该过程。

提前致谢!

标签: ralgorithmdplyr

解决方案


假设 的元素df$variable是唯一的,以下应该起作用:

procedure <- function(x) {
  df1 <- df
  df1[df1$variable == x,"variable"] <- NA
  mice(df1, m = 5, maxit = 5, method = "norm", pred = pred_matrix, seed = 2019)
}

results <- lapply(df$variable, procedure)

如果它们不是唯一的,您可以按如下方式遍历索引:

procedure <- function(x) {
  df1 <- df
  df1[x,"variable"] <- NA
  mice(df1, m = 5, maxit = 5, method = "norm", pred = pred_matrix, seed = 2019)
}

results <- lapply(1:length(df$variable), procedure)

推荐阅读