Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将函数应用于同一列中的不同组_R_Function_Apply - Fatal编程技术网

R 将函数应用于同一列中的不同组

R 将函数应用于同一列中的不同组,r,function,apply,R,Function,Apply,我有一些来自3条不同河流10个不同地点的每日温度数据。有些网站缺少日期,需要填写NA 我如何将下面的代码应用于每个站点A-J,以便每个站点不再缺少日期。一些网站都缺少相同的日期 sorted_data = SiteA[order(SiteA$Date),] data_length = length(sorted_data$Date) time_min = sorted_data$Date[1] time_max = sorted_data$Date[data_length] all_dates

我有一些来自3条不同河流10个不同地点的每日温度数据。有些网站缺少日期,需要填写NA 我如何将下面的代码应用于每个站点A-J,以便每个站点不再缺少日期。一些网站都缺少相同的日期

sorted_data = SiteA[order(SiteA$Date),]
data_length = length(sorted_data$Date)
time_min = sorted_data$Date[1]
time_max = sorted_data$Date[data_length]
all_dates = seq(time_min, time_max, by="day")
all_dates_frame = data.frame(list(Date=all_dates))
SiteA= merge(all_dates_frame, sorted_data, all=T)

您可以将该代码包装成一个函数并应用它,但该代码还有其他问题,而且它也不是一种统计上有效的插补方法(除非您知道一些关于这个特殊情况我不知道的事情)

这是我的建议:

require(data.table) # to avoid trouble using rbind on dates and for speed
require(RRF)

# Simulate the data in question 
siteA <- data.table(Stream = c(1,1,1), Date = c(Sys.Date(), Sys.Date()+1, NA), site = 1)
siteB <- data.table(Stream = c(2,2,2), Date = c(Sys.Date()-1, Sys.Date()+1, NA), site = 2)
siteC <- data.table(Stream = c(3,3,3), Date = c(Sys.Date()-2, NA, Sys.Date()), site = 3)
siteD <- data.table(Stream = c(1,1,1), Date = c(NA, Sys.Date()+1, NA), site = 4)
siteE <- data.table(Stream = c(2,2,2), Date = c(Sys.Date(), NA, NA), site = 5)
siteF <- data.table(Stream = c(3,3,3), Date = c(Sys.Date(), Sys.Date()+1, NA), site = 6)
siteG <- data.table(Stream = c(1,1,1), Date = c(Sys.Date(), Sys.Date()-1, NA), site = 7)
siteH <- data.table(Stream = c(1,1,1), Date = c(Sys.Date(), Sys.Date()-3, NA), site = 8)
siteI <- data.table(Stream = c(1,1,1), Date = c(Sys.Date(), Sys.Date()+1, NA), site = 9)
siteJ <- data.table(Stream = c(1,1,1), Date = c(Sys.Date(), Sys.Date()+1, NA), site = 10)


# Combine data and impute date
DT <- rbind(siteA,siteB,siteC,siteD,siteE,siteF,siteG,siteH,siteI,siteJ)
DT <- DT[, Date:=as.factor(as.character(Date))]

DT <- na.roughfix(DT)
DT

    Stream       Date site
 1:      1 2016-06-14    1
 2:      1 2016-06-15    1
 3:      1 2016-06-14    1
 4:      2 2016-06-13    2
 5:      2 2016-06-15    2
 6:      2 2016-06-14    2
 7:      3 2016-06-12    3
 8:      3 2016-06-14    3
 9:      3 2016-06-14    3
10:      1 2016-06-14    4
11:      1 2016-06-15    4
12:      1 2016-06-14    4
13:      2 2016-06-14    5
14:      2 2016-06-14    5
15:      2 2016-06-14    5
16:      3 2016-06-14    6
17:      3 2016-06-15    6
18:      3 2016-06-14    6
19:      1 2016-06-14    7
20:      1 2016-06-13    7
21:      1 2016-06-14    7
22:      1 2016-06-14    8
23:      1 2016-06-11    8
24:      1 2016-06-14    8
25:      1 2016-06-14    9
26:      1 2016-06-15    9
27:      1 2016-06-14    9
28:      1 2016-06-14   10
29:      1 2016-06-15   10
30:      1 2016-06-14   10
    Stream       Date site
require(data.table)#避免在日期和速度上使用rbind时出现问题
要求(RRF)
#模拟有问题的数据

欢迎来到StackOverflow。请花点时间阅读这篇文章以及如何提供答案并相应地修改你的问题。看看
?tapply
?aggregate
。我认为这是一条路,但我仍停留在细节上。我正在阅读聚合和其他类似于apply的函数。我不知道如何告诉R将它应用到每个网站上,基于名称可复制的样本数据,显示你的数据结构将是有益的。谢谢你的帮助,我真的很感激。我的数据与您的代码不同,因为缺少日期的NA不存在。跳过的日期(如2016年6月13日、2016年6月15日)。理想情况下,该函数将查看每个站点的日期范围,创建缺少日期的行,在缺少日期的临时数据列中插入NA。再次感谢。