两个数据集之间的R线性插值
我是R新手,我想知道如何在两个数据表之间进行插值,并将结果打印到“table1”的新列中 表1:两个数据集之间的R线性插值,r,interpolation,R,Interpolation,我是R新手,我想知道如何在两个数据表之间进行插值,并将结果打印到“table1”的新列中 表1: > (Table1 <- read.csv2("~/R/Table1.txt",sep="")) WindSpeed Degrees Direction 1 7.68 58.9 ENE 2 5.09 63.2 ENE 3 7.56 72.2 ENE 4 8.39 73.8
> (Table1 <- read.csv2("~/R/Table1.txt",sep=""))
WindSpeed Degrees Direction
1 7.68 58.9 ENE
2 5.09 63.2 ENE
3 7.56 72.2 ENE
4 8.39 73.8 ENE
5 7.34 73.1 ENE
6 7.83 74.9 ENE
7 8.42 73.8 ENE
8 7.70 85.5 E
9 2.58 75.6 E
有人能帮我吗
好的,有一点更新:
我之前得到的Answare非常有用,但我想找到给定Table2$Output之间的值,例如
windspeed= 7,68
> 66.301+(96.087-66.301)*(7.68-7.5)/(8.5-7.5)
# [1] 71.66248
因此,我不能使用“常量”,因为我的输出数据不是线性的,所以我不能使用“线性”。。。有什么帮助吗?:) 代码中只有两个小错误:
xout
更改为Table1$WindSpeed
(如果我正确理解了您的问题)$y
表1表1
风速度方向输出
1 7.68 58.9 ENE 66.301
2 5.09 63.2 ENE 13.747
3 7.56 72.2 ENE 66.301
4 8.39 73.8 ENE 66.301
5 7.34 73.1 ENE 42.939
6 7.83 74.9 ENE 66.301
7 8.42 73.8 ENE 66.301
8 7.70 85.5 E Næstaátt
9 2.58 75.6恩斯塔特东部
您的代码中只有两个小错误:
xout
更改为Table1$WindSpeed
(如果我正确理解了您的问题)$y
表1表1
风速度方向输出
1 7.68 58.9 ENE 66.301
2 5.09 63.2 ENE 13.747
3 7.56 72.2 ENE 66.301
4 8.39 73.8 ENE 66.301
5 7.34 73.1 ENE 42.939
6 7.83 74.9 ENE 66.301
7 8.42 73.8 ENE 66.301
8 7.70 85.5 E Næstaátt
9 2.58 75.6恩斯塔特东部
下面是一个使用approxfun
的解决方案:
DF1 <- read.table(text = " Wind.speed Output
2 0,5 0
3 1,5 0
4 2,5 1.540
5 3,5 5.938
6 4,5 13.747
7 5,5 25.740
8 6,5 42.939
9 7,5 66.301
10 8,5 96.087")
DF1$Wind.speed <- as.numeric(gsub(",", ".", DF1$Wind.speed, fixed = TRUE))
fun <- approxfun(DF1$Wind.speed, DF1$Output)
fun(7.68)
#[1] 71.66248
DF2 <- read.table(text = " WindSpeed Degrees Direction
1 7.68 58.9 ENE
2 5.09 63.2 ENE
3 7.56 72.2 ENE
4 8.39 73.8 ENE
5 7.34 73.1 ENE
6 7.83 74.9 ENE
7 8.42 73.8 ENE
8 7.70 85.5 E
9 2.58 75.6 E")
DF2$Output <- NA
DF2[DF2$Direction == "ENE", "Output"] <- fun(DF2[DF2$Direction == "ENE", "WindSpeed"])
# WindSpeed Degrees Direction Output
#1 7.68 58.9 ENE 71.66248
#2 5.09 63.2 ENE 20.82287
#3 7.56 72.2 ENE 68.08816
#4 8.39 73.8 ENE 92.81054
#5 7.34 73.1 ENE 62.56308
#6 7.83 74.9 ENE 76.13038
#7 8.42 73.8 ENE 93.70412
#8 7.70 85.5 E NA
#9 2.58 75.6 E NA
DF1这里有一个使用approxfun
的解决方案:
DF1 <- read.table(text = " Wind.speed Output
2 0,5 0
3 1,5 0
4 2,5 1.540
5 3,5 5.938
6 4,5 13.747
7 5,5 25.740
8 6,5 42.939
9 7,5 66.301
10 8,5 96.087")
DF1$Wind.speed <- as.numeric(gsub(",", ".", DF1$Wind.speed, fixed = TRUE))
fun <- approxfun(DF1$Wind.speed, DF1$Output)
fun(7.68)
#[1] 71.66248
DF2 <- read.table(text = " WindSpeed Degrees Direction
1 7.68 58.9 ENE
2 5.09 63.2 ENE
3 7.56 72.2 ENE
4 8.39 73.8 ENE
5 7.34 73.1 ENE
6 7.83 74.9 ENE
7 8.42 73.8 ENE
8 7.70 85.5 E
9 2.58 75.6 E")
DF2$Output <- NA
DF2[DF2$Direction == "ENE", "Output"] <- fun(DF2[DF2$Direction == "ENE", "WindSpeed"])
# WindSpeed Degrees Direction Output
#1 7.68 58.9 ENE 71.66248
#2 5.09 63.2 ENE 20.82287
#3 7.56 72.2 ENE 68.08816
#4 8.39 73.8 ENE 92.81054
#5 7.34 73.1 ENE 62.56308
#6 7.83 74.9 ENE 76.13038
#7 8.42 73.8 ENE 93.70412
#8 7.70 85.5 E NA
#9 2.58 75.6 E NA
DF1将模型与表2中的数据相匹配,并使用此模型对表1进行预测不是更好吗?然而,如果你仍然想插值,你可能应该使用approxfun
。你可能是正确的,因为我的目标是在非线性数据的给定输出值之间的输出值。我更新了这个问题,你介意进一步解释一下你对解决方案的想法吗?:)将模型与表2中的数据相匹配并使用此模型预测表1中的数据不是更好吗?然而,如果你仍然想插值,你可能应该使用approxfun
。你可能是正确的,因为我的目标是在非线性数据的给定输出值之间的输出值。我更新了这个问题,你介意进一步解释一下你对解决方案的想法吗?:)
windspeed= 7,68
> 66.301+(96.087-66.301)*(7.68-7.5)/(8.5-7.5)
# [1] 71.66248
Table1 <-
transform(
Table1, Output =
ifelse(
Direction == "ENE",
approx(
Table2$Wind.speed, Table2$Output, xout = Table1$WindSpeed, method = "constant")$y, "Næsta átt")
)
> Table1
WindSpeed Degrees Direction Output
1 7.68 58.9 ENE 66.301
2 5.09 63.2 ENE 13.747
3 7.56 72.2 ENE 66.301
4 8.39 73.8 ENE 66.301
5 7.34 73.1 ENE 42.939
6 7.83 74.9 ENE 66.301
7 8.42 73.8 ENE 66.301
8 7.70 85.5 E Næsta átt
9 2.58 75.6 E Næsta átt
DF1 <- read.table(text = " Wind.speed Output
2 0,5 0
3 1,5 0
4 2,5 1.540
5 3,5 5.938
6 4,5 13.747
7 5,5 25.740
8 6,5 42.939
9 7,5 66.301
10 8,5 96.087")
DF1$Wind.speed <- as.numeric(gsub(",", ".", DF1$Wind.speed, fixed = TRUE))
fun <- approxfun(DF1$Wind.speed, DF1$Output)
fun(7.68)
#[1] 71.66248
DF2 <- read.table(text = " WindSpeed Degrees Direction
1 7.68 58.9 ENE
2 5.09 63.2 ENE
3 7.56 72.2 ENE
4 8.39 73.8 ENE
5 7.34 73.1 ENE
6 7.83 74.9 ENE
7 8.42 73.8 ENE
8 7.70 85.5 E
9 2.58 75.6 E")
DF2$Output <- NA
DF2[DF2$Direction == "ENE", "Output"] <- fun(DF2[DF2$Direction == "ENE", "WindSpeed"])
# WindSpeed Degrees Direction Output
#1 7.68 58.9 ENE 71.66248
#2 5.09 63.2 ENE 20.82287
#3 7.56 72.2 ENE 68.08816
#4 8.39 73.8 ENE 92.81054
#5 7.34 73.1 ENE 62.56308
#6 7.83 74.9 ENE 76.13038
#7 8.42 73.8 ENE 93.70412
#8 7.70 85.5 E NA
#9 2.58 75.6 E NA