有没有办法补充数据帧中缺失的数字?

时间:2019-11-11 11:18:51

标签: r dataframe

我对R很陌生,所以请问我问的内容是否有些琐碎。 因此,我从图像分析程序中获取了一个包含如下内容的csv文件:

FRAME      OBJECT_IS_IN_TARGET_AREA
1          0
2          1
5          1
6          0
7          0
...        ...
241        1

如您所见,第3帧和第4帧没有行,可能直到第241帧为止都缺少行。现在,有一种方法可以用丢失的行来补充数据帧以接收连续的数字序列范围从1到241,并为OBJECT_IS_IN_TARGET_AREA指定每个补充行N / A?数据框最后应该像这样:

FRAME      OBJECT_IS_IN_TARGET_AREA
1          0
2          1
3          N/A
4          N/A
5          1
6          0
7          0
...        ...
241        1

遗憾的是,无法直接从图像分析程序获取这些值,因此我必须手动添加它们。由于我有很多这些序列,所以这将是一件非常潮人的工作。这就是为什么我选择R。希望您能帮助我。

非常感谢,

E。

3 个答案:

答案 0 :(得分:4)

您可以使用库complete中的tidyr。假设您的数据框名称为df,

library(tidyr)
df %>% complete(FRAME=c(1:241))

应该完成预期的工作。

答案 1 :(得分:2)

我认为您可以使用baseR

Frame <- seq(241)
df <- data.frame(Frame=Frame)
df$OBJECT_IS_IN_TARGET_AREA <- ifelse(df$Frame %in% yourCSV$Frame, yourCSV$OBJECT_IS_IN_TARGET_AREA, NA)

现在df将成为您的补充数据帧,其中NA用于Frame中不在的对象,而OBJECT_IS_IN_TARGET_AREA的值用于csv Frame中的值。

yourCSV dataframe

的示例
yourCSV <- data.frame(Frame=c(1,2,3,10,241), OBJECT_IS_IN_TARGET_AREA=c(1,2,3,4,5))

答案 2 :(得分:1)

Base R解决方案:

df <- merge(data.frame(FRAME = c(1:nrow(df))), df, by = "FRAME", all.x = TRUE)