【发布时间】:2021-08-23 15:26:02
【问题描述】:
我想编写一个代码,用前后行值的平均值替换所有 NA 值。以下代码适用于 1 个单列。有没有什么想法可以在不将列名一一写入代码的情况下为数据集的所有列运行代码?
data$WTI[is.na(data$WTI)] <- rowMeans(cbind(data$WTI[which(is.na(data$WTI))-1],
data$WTI[which(is.na(data$WTI))+1]))
这是我的数据的样子:
> dput(head(data))
structure(list(Timestamp = structure(c(1629417600, 1629331200,
1629244800, 1629158400, 1629072000, 1628812800), tzone = "UTC", class = c("POSIXct",
"POSIXt")), USDTRY = c(8.4852, 8.4939, 8.4485, 8.4284, 8.453,
8.5171), EURTRY = c(9.9325, 9.9311, 9.8916, 9.8746, 9.9618, 10.0539
), EURUSD = c(1.1696, 1.1674, 1.171, 1.1708, 1.1777, 1.1791),
BIST100 = c(1444.63, 1439.86, 1449.59, 1461.69, 1455.25,
1447.64), TR2YT = c(18.01, 18.01, 18.01, 18.01, 18.01, 18.15
), TR10YT = c(16.88, 16.87, 16.79, 16.8, 16.69, 16.77), TR_EURBON_2 = c(3.648673,
3.63085, 3.611969, 3.572728, 3.567871, 3.559959), TR_EURBON_10 = c(6.302608,
6.307343, 6.276473, 6.240502, 6.255035, 6.301358), BRENT = c(65.18,
66.45, 68.23, 69.03, 69.51, 70.59), WTI = c(62.32, 63.69,
65.46, 66.59, 67.29, 68.44), Altın = c(1780.8668, 1780.179,
1787.59, 1785.9556, 1787.2383, 1779.1515), Gümüş = c(23.01,
23.23, 23.4805, 23.6351, 23.8235, 23.74)), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))
谢谢。
【问题讨论】:
-
请与
dput(head(data))分享您的数据集的可重复样本。 -
@SBA 请将
dput()编辑到您的原始问题中,不要将其输入到 cmets 中。
标签: r