【问题标题】:Problems when attempting to use "na_ma" on a list of data frames?尝试在数据帧列表上使用“na_ma”时出现问题?
【发布时间】:2021-12-21 07:08:38
【问题描述】:

我是一个相当新手的 R 用户,但一直在尝试做一些简单的缺失值替换。 (用NA之前和之后的值的平均值替换NA

我一直在使用 imputeTS 库中的 na_ma() 函数,它正在做我需要做的事情。

na_ma(x , k=1, weighting = "simple") 

我已将其应用于列,然后是数据框,一切正常。我现在希望将其应用于数据框列表,但它似乎不起作用。

如果有人能指出我在这个问题上的最佳选择是正确的方向,我将不胜感激。

【问题讨论】:

  • 您不妨试试lapply,将函数应用于列表中的项目。例如 lapply(my_list, function(x) na_ma(x , k=1, weighting = "simple")) ,显然您可以将 my_list 更改为您的列表实际调用的任何内容(尽管您不需要更改调用中的任何其他内容)
  • 感谢您的回复!我已经尝试过 apply 的变体。包括 lapply 和您的建议,代码运行但似乎没有执行看起来很奇怪的功能(NA 仍然存在)。然后我还尝试向范围添加一组数据帧: lapply(mylist[1:3]... 但我收到一条错误消息,提示“尝试应用非函数”

标签: r na missing-data imputation imputets


【解决方案1】:

使用 lapply 或循环应该很简单。

这是一个可重现的示例 - lapply:

library("imputeTS")

a <- data.frame(x1 <- c(2,NA,NA,2,4,6,6), x2 <- c(2,NA,7,2,NA,6,6))
b <- data.frame(x1 <- c(2,NA,33,2,4,61,6), x2 <- c(22,NA,71,2,NA,36,6))

# this is your list with data.frames that contain columns with NAs
l <- list(a,b)

# Don't forget to assign the result of lapply back to your list l
l <-lapply(l, function(x) na_ma(x , k=1, weighting = "simple"))
l

这是一个带有列表的示例:

library("imputeTS")

# Create Example data
a <- data.frame(x1 <- c(2,NA,NA,2,4,6,6), x2 <- c(2,NA,7,2,NA,6,6))
b <- data.frame(x1 <- c(2,NA,33,2,4,61,6), x2 <- c(22,NA,71,2,NA,36,6))
l <- list(a,b)


for (i in length(l)) 
{
  l[[i]] <- na_ma(l[[i]] , k=1, weighting = "simple")
}
l 

for 循环版本可能有一个优势,即警告或错误更易于追踪。但无论如何,我猜这两个版本都应该可以工作。

【讨论】:

  • 谢谢!我忘记分配结果。感谢您花时间回答。我真的很感激。
猜你喜欢
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多