[英]R Linear interpolation between two data sets
我是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 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
表2:
> (Table2 <- read.delim("~/R/Table2.txt")[-1,])
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
现在我想取Table1 $ WindSpeed值,其中Direction ==“ENE”并在Table2 $ Wind.speed值之间进行插值,以将插值的Table2 $ Output值打印到一个新列Table1 $ Output中。
所以我一直在努力做的是:
(Table1 <-
transform(
Table1, Output =
ifelse(
Direction == "ENE",
approx(
Table2$Wind.speed,Table2$Output,xout=Table1$Output, method = "constant"), "Næsta átt")
)
)
但有些事情是错的,我得到:
WindSpeed Degrees Direction Output
1 7.68 58.9 ENE 1, 1, 1, 1, 1, 1, 1, 1, 1
2 5.09 63.2 ENE NA, NA, NA, NA, NA, NA, NA, NA, NA
3 7.56 72.2 ENE 1, 1, 1, 1, 1, 1, 1, 1, 1
4 8.39 73.8 ENE NA, NA, NA, NA, NA, NA, NA, NA, NA
5 7.34 73.1 ENE 1, 1, 1, 1, 1, 1, 1, 1, 1
6 7.83 74.9 ENE NA, NA, NA, NA, NA, NA, NA, NA, NA
7 8.42 73.8 ENE 1, 1, 1, 1, 1, 1, 1, 1, 1
8 7.70 85.5 E Næsta átt
9 2.58 75.6 E Næsta átt
有谁可以帮助我吗?
好的一点点更新:我之前得到的回答非常有帮助,但我想找到给定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
从约会输出中提取y值 所以:
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
这是一个使用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
但是,为Output
而不是插值开发适当的模型可能更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.