在数据帧中将0附加到缺少的观察值。

时间:2014-12-15 08:10:09

标签: r dataframe

我有一个数据集,我希望在数据框中有一定数量的观察结果

A 20
B 10
C 5

然而,在运行我的分析时,情况并非总是如此,有时我发现缺少观察结果,结果数据框看起来像这样

A 10
C 5 

在这种情况下,没有关于B的观察。我想在绘图之前将0个观察结果附加到最终数据帧,以便指示缺失观察的值。

最终数据框应如下所示

A 10
B 0
C 5

如何在R中完成此操作?

2 个答案:

答案 0 :(得分:1)

如果您将ID列(使用A,B,C)定义为factor(这似乎合适),您可以绘制数据,甚至是那些不在数据中的因子级别(但在定义的因子中)水平)将被绘制。这是一个小例子:

df <- data.frame(ID = LETTERS[1:3], x = rnorm(3))
df
#  ID        x
#1  A 1.350458
#2  B 1.340855
#3  C 1.311329
subdf <- df[c(1,3),]
subdf
#  ID        x
#1  A 1.350458
#3  C 1.311329
with(subdf, plot(x ~ ID))

你会发现情节中也存在“B”,尽管它不在子集数据中。

答案 1 :(得分:1)

也许您可以使用“reshape2”中的meltdcast执行某些操作。

这就是我的想法:

library(reshape2)
out <- dcast(
  melt(                           # Makes a data.frame from a list
    mget(ls(pattern = "df\\d")),  # Collects the relevant df in a list
    id.vars = "V1"),              # The variable to melt by
  L1 ~ V1, value.var = "value", fill = 0)  # Other options for dcast
out
#    L1  A  B C
# 1 df1 20 10 5
# 2 df2 10  0 5

从那里,你可以回到长数据表格。

melt(out, id.vars = "L1")
#    L1 variable value
# 1 df1        A    20
# 2 df2        A    10
# 3 df1        B    10
# 4 df2        B     0
# 5 df1        C     5
# 6 df2        C     5

如果需要单独的data.frame,那么您还可以查看使用split,但如果您要进行绘图,则此格式应该可以正常使用。


样本数据

df1 <- structure(list(V1 = c("A", "B", "C"), V2 = c(20L, 10L, 5L)), 
                 .Names = c("V1", "V2"), class = "data.frame", 
                 row.names = c(NA, -3L))
df2 <- structure(list(V1 = c("A", "C"), V2 = c(10L, 5L)), 
                 .Names = c("V1", "V2"), class = "data.frame", 
                 row.names = c(NA, -2L))