R 将0附加到数据帧中缺少的观测值。
我有一个数据集,我期望在一个数据框中有固定数量的观测值R 将0附加到数据帧中缺少的观测值。,r,dataframe,R,Dataframe,我有一个数据集,我期望在一个数据框中有固定数量的观测值 A 20 B 10 C 5 然而,在运行我的分析时,情况并非总是如此,有时我会发现缺少的观察结果,结果数据框如下所示 A 10 C 5 A 10 B 0 C 5 在这种情况下,B没有观测值。在绘图之前,我希望在最终数据帧中附加0个观测值,以指示缺失观测值的值 最终的数据帧应该是这样的 A 10 C 5 A 10 B 0 C 5 我怎样才能在R中实现这一点 如果您将ID列(A、B、C)定义为因子,这在这里似乎是合适的,那么您可以
A 20
B 10
C 5
然而,在运行我的分析时,情况并非总是如此,有时我会发现缺少的观察结果,结果数据框如下所示
A 10
C 5
A 10
B 0
C 5
在这种情况下,B没有观测值。在绘图之前,我希望在最终数据帧中附加0个观测值,以指示缺失观测值的值
最终的数据帧应该是这样的
A 10
C 5
A 10
B 0
C 5
我怎样才能在R中实现这一点 如果您将ID列(A、B、C)定义为
因子,这在这里似乎是合适的,那么您可以绘制数据,甚至可以绘制不在数据中(但在定义的因子水平中)的因子水平。下面是一个小例子:
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))
df也许你可以用“重塑2”中的melt
和dcast
做点什么
以下是我的想法:
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
如果需要单独的data.frame
s,那么您也可以使用split
,但是如果您只是要打印,这种格式应该可以正常工作
样本数据
df1如何创建此数据集?这是一个只有两列的data.frame吗?第一列总是大写英文字母吗?换句话说,您如何知道缺少哪些级别?如果您可以发布您正在使用的实际代码,这将非常有用,因为我们可以指出,如果(is.na(the_answer_for_B))final_dataframe$B@roman我有一个创建此数据集的外部进程,您可以在哪里添加一行代码,如。第一列中的观察顺序可能不同,也就是说,它不一定是B C,而可以是B C A。考虑把你的评论中的所有信息加入到文章中来改进你的问题。但假设原始data.frame没有关于冗余因子级别的信息。这就是我询问信息生成方式的原因。也许它可以从源头上解决(用你的逻辑)。没错,@RomanLuštrik。也许问题不是很精确,原始数据框架是否包含有关因子水平的信息。我将“我期望有固定数量的观察结果”解释为因子水平是已知的,但可能事实并非如此。OP应该澄清这一点。数据是由一个外部程序生成的,我用R来读取它。因此,原始数据没有@Roman所说的冗余因子水平的信息。@eastafri,在这种情况下,我的答案将不起作用。但你还没有回答大卫评论中提到的你如何知道哪些级别缺失(或不缺失)的问题。我知道,因为我预计在所有情况下都是B和C。如果没有B,则外部过程不包括它。为了绘图,我想显示没有B,因此我想将B“注入”到数据框中,并在第二列中为其赋值0。我认为它可能包括扫描第一列,如果我检测到缺少B,那么添加一个值为0的新观察值B。我应该对所有缺少观察的情况都这样做。只是不知道如何在R中有效地处理这个问题