使用 na.approx 或 na.spline 替换矩阵数据的 NA
Replace NAs using na.approx or na.spline for matrix data
我是 R 的新手,目前有一个问题,数据如下所示:
ID h1 h2 h3 h4 h5 h6 h7 h8
IP6_1 0.1800 NA -0.8600 NA 0.0400 -0.1400 1.4400 1.4900
IP6_2 -0.0250 -0.3050 -1.1050 -1.2150 0.0250 1.2750 1.7950 1.3850
IP6_3 0.2125 -0.1875 NA -1.2225 -0.1425 0.7325 1.6275 1.3975
IP6_4 0.0150 NA -1.0450 -0.3550 0.2950 -0.0150 0.3850 0.3050
IP6_5 0.1200 -0.0900 -0.9100 -0.6500 0.0900 -0.2700 0.9100 1.1200
IP6_6 0.0200 -0.0200 -0.8400 -0.6600 NA -0.0900 0.6200 0.0800
数据具有随机 NA,我想使用 na.approx 每 行 替换它。
我尝试使用它:
z_data <- zoo(cluster_data_wf[,-1])
na.approx(z_data)
根本不会取代任何 NA。
一些有助于通过近似的线性插值或通过样条的三次样条插值替换 NA 的帮助将不胜感激。
编辑:最终输出应该仍然有第一列 ID
像这样?
require(zoo)
cols = colnames(x[, -1])
x = data.frame(ID=x[, 1], t(apply(x[, -1], 1, na.approx)))
colnames(x)[-1] = cols
print(x)
ID h1 h2 h3 h4 h5 h6 h7 h8
1 IP6_1 0.1800 -0.3400 -0.860 -0.4100 0.0400 -0.1400 1.4400 1.4900
2 IP6_2 -0.0250 -0.3050 -1.105 -1.2150 0.0250 1.2750 1.7950 1.3850
3 IP6_3 0.2125 -0.1875 -0.705 -1.2225 -0.1425 0.7325 1.6275 1.3975
4 IP6_4 0.0150 -0.5150 -1.045 -0.3550 0.2950 -0.0150 0.3850 0.3050
5 IP6_5 0.1200 -0.0900 -0.910 -0.6500 0.0900 -0.2700 0.9100 1.1200
6 IP6_6 0.0200 -0.0200 -0.840 -0.6600 -0.3750 -0.0900 0.6200 0.0800
问题没有以可重现的方式提供输入,所以我们真的不知道你是从什么开始的;然而,如果我们在下面的注释中给出了可重现的内容,那么由于 na.approx
按列操作,我们转置它,除了第 1 列,使用 na.approx
,将它转回并填回除第 1 列以外的所有内容:
replace(DF, -1, t(na.approx(t(DF[, -1]))))
给予:
ID h1 h2 h3 h4 h5 h6 h7 h8
1 IP6_1 0.1800 -0.3400 -0.860 -0.4100 0.0400 -0.1400 1.4400 1.4900
2 IP6_2 -0.0250 -0.3050 -1.105 -1.2150 0.0250 1.2750 1.7950 1.3850
3 IP6_3 0.2125 -0.1875 -0.705 -1.2225 -0.1425 0.7325 1.6275 1.3975
4 IP6_4 0.0150 -0.5150 -1.045 -0.3550 0.2950 -0.0150 0.3850 0.3050
5 IP6_5 0.1200 -0.0900 -0.910 -0.6500 0.0900 -0.2700 0.9100 1.1200
6 IP6_6 0.0200 -0.0200 -0.840 -0.6600 -0.3750 -0.0900 0.6200 0.0800
注:
Lines <- " ID h1 h2 h3 h4 h5 h6 h7 h8
IP6_1 0.1800 NA -0.8600 NA 0.0400 -0.1400 1.4400 1.4900
IP6_2 -0.0250 -0.3050 -1.1050 -1.2150 0.0250 1.2750 1.7950 1.3850
IP6_3 0.2125 -0.1875 NA -1.2225 -0.1425 0.7325 1.6275 1.3975
IP6_4 0.0150 NA -1.0450 -0.3550 0.2950 -0.0150 0.3850 0.3050
IP6_5 0.1200 -0.0900 -0.9100 -0.6500 0.0900 -0.2700 0.9100 1.1200
IP6_6 0.0200 -0.0200 -0.8400 -0.6600 NA -0.0900 0.6200 0.0800 "
DF <- read.table(text = Lines, header = TRUE, as.is = TRUE)
我是 R 的新手,目前有一个问题,数据如下所示:
ID h1 h2 h3 h4 h5 h6 h7 h8
IP6_1 0.1800 NA -0.8600 NA 0.0400 -0.1400 1.4400 1.4900
IP6_2 -0.0250 -0.3050 -1.1050 -1.2150 0.0250 1.2750 1.7950 1.3850
IP6_3 0.2125 -0.1875 NA -1.2225 -0.1425 0.7325 1.6275 1.3975
IP6_4 0.0150 NA -1.0450 -0.3550 0.2950 -0.0150 0.3850 0.3050
IP6_5 0.1200 -0.0900 -0.9100 -0.6500 0.0900 -0.2700 0.9100 1.1200
IP6_6 0.0200 -0.0200 -0.8400 -0.6600 NA -0.0900 0.6200 0.0800
数据具有随机 NA,我想使用 na.approx 每 行 替换它。 我尝试使用它:
z_data <- zoo(cluster_data_wf[,-1])
na.approx(z_data)
根本不会取代任何 NA。
一些有助于通过近似的线性插值或通过样条的三次样条插值替换 NA 的帮助将不胜感激。
编辑:最终输出应该仍然有第一列 ID
像这样?
require(zoo)
cols = colnames(x[, -1])
x = data.frame(ID=x[, 1], t(apply(x[, -1], 1, na.approx)))
colnames(x)[-1] = cols
print(x)
ID h1 h2 h3 h4 h5 h6 h7 h8
1 IP6_1 0.1800 -0.3400 -0.860 -0.4100 0.0400 -0.1400 1.4400 1.4900
2 IP6_2 -0.0250 -0.3050 -1.105 -1.2150 0.0250 1.2750 1.7950 1.3850
3 IP6_3 0.2125 -0.1875 -0.705 -1.2225 -0.1425 0.7325 1.6275 1.3975
4 IP6_4 0.0150 -0.5150 -1.045 -0.3550 0.2950 -0.0150 0.3850 0.3050
5 IP6_5 0.1200 -0.0900 -0.910 -0.6500 0.0900 -0.2700 0.9100 1.1200
6 IP6_6 0.0200 -0.0200 -0.840 -0.6600 -0.3750 -0.0900 0.6200 0.0800
问题没有以可重现的方式提供输入,所以我们真的不知道你是从什么开始的;然而,如果我们在下面的注释中给出了可重现的内容,那么由于 na.approx
按列操作,我们转置它,除了第 1 列,使用 na.approx
,将它转回并填回除第 1 列以外的所有内容:
replace(DF, -1, t(na.approx(t(DF[, -1]))))
给予:
ID h1 h2 h3 h4 h5 h6 h7 h8
1 IP6_1 0.1800 -0.3400 -0.860 -0.4100 0.0400 -0.1400 1.4400 1.4900
2 IP6_2 -0.0250 -0.3050 -1.105 -1.2150 0.0250 1.2750 1.7950 1.3850
3 IP6_3 0.2125 -0.1875 -0.705 -1.2225 -0.1425 0.7325 1.6275 1.3975
4 IP6_4 0.0150 -0.5150 -1.045 -0.3550 0.2950 -0.0150 0.3850 0.3050
5 IP6_5 0.1200 -0.0900 -0.910 -0.6500 0.0900 -0.2700 0.9100 1.1200
6 IP6_6 0.0200 -0.0200 -0.840 -0.6600 -0.3750 -0.0900 0.6200 0.0800
注:
Lines <- " ID h1 h2 h3 h4 h5 h6 h7 h8
IP6_1 0.1800 NA -0.8600 NA 0.0400 -0.1400 1.4400 1.4900
IP6_2 -0.0250 -0.3050 -1.1050 -1.2150 0.0250 1.2750 1.7950 1.3850
IP6_3 0.2125 -0.1875 NA -1.2225 -0.1425 0.7325 1.6275 1.3975
IP6_4 0.0150 NA -1.0450 -0.3550 0.2950 -0.0150 0.3850 0.3050
IP6_5 0.1200 -0.0900 -0.9100 -0.6500 0.0900 -0.2700 0.9100 1.1200
IP6_6 0.0200 -0.0200 -0.8400 -0.6600 NA -0.0900 0.6200 0.0800 "
DF <- read.table(text = Lines, header = TRUE, as.is = TRUE)