我必须在数据框中填充日期列,最后一天再加一天,然后最后一天(再加一天)。它不会填补缺失的日期,因为从最后一个日期开始没有更多的日期,因此没有空白。
还有更多的列,但是为了示例起见,让我们保持简单。
df <- structure(list(dates = c("1991-01-01", "1991-01-02", "1991-01-03",
NA, NA, NA)), row.names = c(NA, 6L), class = c("tbl_df", "tbl",
"data.frame"))
# A tibble: 6 x 1
dates
* <chr>
1 1991-01-01
2 1991-01-02
3 1991-01-03
4 NA
5 NA
6 NA
我知道我可以用序列(seq.Date)代替它,但是我想前一段时间,我在某个地方读到了一个优雅的函数,可以使用最后一个日期和一个滞后来填充向量。
预期结果:
# A tibble: 6 x 1
dates
* <chr>
1 1991-01-01
2 1991-01-02
3 1991-01-03
4 1991-01-04
5 1991-01-05
6 1991-01-06
类似于zoo::na.locf()
,但考虑到日期,我事先并不知道“发件人”和“发件人”
有任何提示吗?
答案 0 :(得分:2)
另一种public class NetworkManager : MonoBehaviour, IMatchmakingCallbacks, IOnEventCallback
{
public const byte InstantiateVrAvatarEventCode = 1;
public void OnJoinedRoom() // w/o override
{
// code from the tutorial here
}
public void OnEvent(EventData photonEvent)
{
// code from the tutorial here
}
private void OnEnable()
{
PhotonNetwork.AddCallbackTarget(this);
}
private void OnDisable()
{
PhotonNetwork.RemoveCallbackTarget(this);
}
#region Unused IMatchmakingCallbacks
public void OnFriendListUpdate(List<FriendInfo> friendList)
{
}
public void OnCreatedRoom()
{
}
public void OnCreateRoomFailed(short returnCode, string message)
{
}
public void OnJoinRoomFailed(short returnCode, string message)
{
}
public void OnJoinRandomFailed(short returnCode, string message)
{
}
public void OnLeftRoom()
{
}
#endregion
}
和dplyr
的可能性是:
tidyr
或者仅涉及df %>%
mutate(dates = as.Date(dates, format = "%Y-%m-%d")) %>%
fill(dates) %>%
mutate(dates = if_else(duplicated(dates),
dates + cumsum(duplicated(dates)),
dates))
dates
<date>
1 1991-01-01
2 1991-01-02
3 1991-01-03
4 1991-01-04
5 1991-01-05
6 1991-01-06
的可能性:
dplyr
答案 1 :(得分:1)
我们可以尝试用先前的值fill
缺少日期,并向其中添加cumsum
的值NA
。
library(dplyr)
df %>%
mutate(temp = +(is.na(dates)),
dates = as.Date(dates)) %>%
tidyr::fill(dates) %>%
mutate(dates_new = dates + cumsum(temp)) %>%
select(-temp)
# dates dates_new
# <date> <date>
#1 1991-01-01 1991-01-01
#2 1991-01-02 1991-01-02
#3 1991-01-03 1991-01-03
#4 1991-01-03 1991-01-04
#5 1991-01-03 1991-01-05
#6 1991-01-03 1991-01-06
答案 2 :(得分:1)
这是基本的R主意,
as.Date(max(df$dates, na.rm = TRUE)) + seq(sum(is.na(df$dates)))
#[1] "1991-01-04" "1991-01-05" "1991-01-06"
或将它们分配回您的数据框,即
df$dates[is.na(df$dates)] <- as.character(as.Date(max(df$dates, na.rm = TRUE)) + seq(sum(is.na(df$dates))))
df
#1 1991-01-01
#2 1991-01-02
#3 1991-01-03
#4 1991-01-04
#5 1991-01-05
#6 1991-01-06