gpt4 book ai didi

r - 使用匹配函数查找并替换 R 数据框中的缺失值(已关闭)

转载 作者:行者123 更新时间:2023-12-02 10:59:24 25 4
gpt4 key购买 nike

我有以下数据框

t <- strptime(c("2012-01-01 00:00:00","2012-01-01 01:00:00", "2012-01-01 02:00:00", "2012-01-01 05:00:00", "2012-01-01 06:00:00"), format ="%Y-%m-%d %H:%M:%S");t
d1 <- 2:6
d2 <- 15:11
dfr <- data.frame(t, d1, d2);dfr

t d1 d2
2012-01-01 00:00:00 2 15
2012-01-01 01:00:00 3 14
2012-01-01 02:00:00 4 13
2012-01-01 05:00:00 5 12
2012-01-01 06:00:00 6 11

您可以注意到,时间“2012-01-01 03:00:00”和“2012-01-01 04:00:00”的数据丢失了。

为了找出丢失的数据,我首先生成了正确的时间步长,然后将其与下面的“t”列进行比较。

    t1Gen <- strptime("2012-01-01 00:00:00",format="%Y-%m-%d %H:%M:%S");
t2Gen <- strptime("2012-01-01 06:00:00",format="%Y-%m-%d %H:%M:%S");

tGen <- seq(t1Gen,t2Gen, 3600);tGen

"2012-01-01 00:00:00 CET"
"2012-01-01 01:00:00 CET"
"2012-01-01 02:00:00 CET"
"2012-01-01 03:00:00 CET"
"2012-01-01 04:00:00 CET"
"2012-01-01 05:00:00 CET"
"2012-01-01 06:00:00 CET"

mdfr <- match(tGen,dfr$t);mdfr
[1] 1 2 3 NA NA 4 5
subfr <- subset(mdfr, is.na(mdfr));subfr
[1] NA NA

使用匹配函数,通过“NA”将 2 个元素挑出为缺失。现在我的目标是用“-99”填充两个缺失的行以表明数据丢失,结果数据框如下所示;

                   t d1 d2
2012-01-01 00:00:00 2 15
2012-01-01 01:00:00 3 14
2012-01-01 02:00:00 3 14
2012-01-01 03:00:00 -99-99
2012-01-01 04:00:00 -99-99
2012-01-01 05:00:00 5 12
2012-01-01 06:00:00 6 11

我一直坚持到这一点,任何有关这方面的帮助都将不胜感激。P.S:任何其他代码也将受到欢迎。谢谢

最佳答案

您可以合并 dfrtGen 向量(将后者转换为data.frame 后)。指定 all = TRUE 允许您用 NA 填充缺失的行。

dfrM <- merge(dfr, data.frame(t = tGen), all = TRUE)

然后确定缺少哪些值并用 -99 替换:

dfrM[is.na(dfrM)] <- -99

> dfrM
t d1 d2
1 2012-01-01 00:00:00 2 15
2 2012-01-01 01:00:00 3 14
3 2012-01-01 02:00:00 4 13
4 2012-01-01 03:00:00 -99 -99
5 2012-01-01 04:00:00 -99 -99
6 2012-01-01 05:00:00 5 12
7 2012-01-01 06:00:00 6 11

关于r - 使用匹配函数查找并替换 R 数据框中的缺失值(已关闭),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13627998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com