我想使用dblob(或类似的)函数将tibble中一行的现有值替换为相同大小的vector中的值。
在我的真实的问题中,我有一个tibble df
,其中包含一些NA
缺失值,例如:
df <- tibble(
column1 = c(1, 5, 10),
column2 = c(2, NA, 12),
column3 = c(NA, 7, NA),
column4 = c(4, 8, 16)
)
字符串
我想用插值来填充那些缺失的值。我可以做如下的事情,效果很好:
num_col <- ncol(df)
x_interp <- seq(1, num_col, 1)
for (idx_row in 1:nrow(df)) {
df[idx_row, ] <- as.list((spline(x_interp, df[idx_row, ], xout = x_interp, method = "natural")$y))
}
型
但实际上我有150000行和20列,for循环需要一段时间。
有没有人能提出一种方法来做同样的事情使用dmgr函数?
有主意吗?谢谢!
我尝试过这样的方法,但它不起作用:
df2 <- df %>%
rowwise() %>%
mutate(across(everything(),
spline(x_interp, across(everything()), xout = x_interp, method = "natural")$y))
我希望在前面的例子中得到这样的结果:
column1 column2 column3 column4
<dbl> <dbl> <dbl> <dbl>
1 1 2 3 4
2 5 6 7 8
3 10 12 14 16
1条答案
按热度按时间gtlvzcf81#
这将很快得到你想要的,假设
NA
值不在第一列或最后一列:字符串
但有两件事.首先,当你在R中使用
tibbles
或data.frames
时,你会想把你的数据序列放在列而不是行中,因为tibble
或data.frame
中的每一列都是一个原子向量(就像你从c(1,2,3)
得到的那样)。第二,有一个软件包
xts
(可扩展时间序列)基于一个名为zoo
的软件包。这两个软件包对于处理基于序列的数据都非常有用。如果你看看这些软件包并学习如何使用它们,从长远来看,你将保存大量的时间。你的序列必须按列排列,但是,例如,有一个zoo::na.approx()
函数可以插值时间序列,所以你不必编写混乱,难以阅读的代码(就像我上面做的那样)。希望解决方案(以及对其他软件包的参考)对您有帮助!