我有兩個資料框:
> df1 <- data.frame(date = as.Date( c( "2021-06-01", "2021-06-02", "2021-06-03", "2021-06-04",
"2021-06-05", "2021-06-06", "2021-06-07", "2021-06-08",
"2021-06-09", "2021-06-10", "2021-06-11", "2021-06-12",
"2021-06-13") ),
temperature = c( 17, 30, 28, 29, 16, 21, 20, 11, 28, 29, 25, 26, 19) )
和
> df2 <- data.frame( ID = c( 1 : 4 ),
date.pose = as.Date(c("2021-06-01", "2021-06-03", "2021-06-06", "2021-06-10") ),
date.withdrawal = as.Date(c("2021-06-02", "2021-06-05", "2021-06-09", "2021-06-13") ) )
我想將每個時期的平均溫度存盤df2在一個新的列 ( df2$mean.temperature) 中。
對于ID = 1from df2,平均溫度將使用 和 的溫度計算2021-06-01,2021-06-02女巫是mean(17, 30)
換句話說,我想得到這個:
> df2 <- data.frame(ID = c( 1 : 4 ),
date.pose = as.Date( c("2021-06-01", "2021-06-03", "2021-06-06", "2021-06-10") ) ,
date.withdrawal = as.Date( c("2021-06-03", "2021-06-06", "2021-06-10", "2021-06-13") ),
mean.Temperature = c(23.5, 24.3, 20.0, 24.8) )
我正在嘗試df2從新的列中添加 ID df1。一旦我這樣做,我可以像這樣聚合:
> df3 <- aggregate(df1$temperature, list(df1$ID, df2$date.pose), FUN = mean)
不知道如何在df1中添加對應的ID。或者也許有更好的方法來做到這一點?
uj5u.com熱心網友回復:
這是一種使用uncountfromtidyr和一些連接的方法。
df2 %>%
mutate(days = (date.witdrawal - date.pose 1) %>% as.integer) %>%
tidyr::uncount(days, .id = "row") %>%
transmute(ID, date = date.pose row - 1) %>%
left_join(df1) %>%
group_by(ID) %>%
summarize(mean.Temperature = mean(temperature)) %>%
right_join(df2)
結果
# A tibble: 4 × 4
ID mean.Temperature date.pose date.witdrawal
<int> <dbl> <date> <date>
1 1 23.5 2021-06-01 2021-06-02
2 2 24.3 2021-06-03 2021-06-05
3 3 20 2021-06-06 2021-06-09
4 4 24.8 2021-06-10 2021-06-13
uj5u.com熱心網友回復:
更新。感謝@Jon Spring:
我們可以這樣做:
邏輯:
在按日期長時間旋轉 df1
然后按 ID 分組后按日期加入兩個 df,最后使用arrange并重新
加入:fillsummarisemean()
library(dplyr)
library(tidyr)
df2 %>%
pivot_longer(-ID, values_to = "date") %>%
full_join(df1, by= "date") %>%
arrange(date) %>%
fill(ID, .direction = "down") %>%
group_by(ID) %>%
summarise(mean_temp = mean(temperature, na.rm = TRUE)) %>%
left_join(df2, by="ID")
ID mean_temp date.pose date.witdrawal
<int> <dbl> <date> <date>
1 1 23.5 2021-06-01 2021-06-02
2 2 24.3 2021-06-03 2021-06-05
3 3 20 2021-06-06 2021-06-09
4 4 24.8 2021-06-10 2021-06-13
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/491764.html
上一篇:R中的條件if陳述句和回圈
