将 NA 与新数据框中的数据插入

Intercalate NAs with data in new data frame

我有一个 df 这样的:

           X1  X2  X3  X4
Number      4   4   4   4
Number.1    2   3   3   2

我想把它变成这样:

> X1
  NA
   4
   2
  NA
   4
   3
  NA
   4
   3
  NA
   4
   2
  NA

如何像示例中那样用 df 插入 NA? 到目前为止,我尝试使用 sapply(df, function(x) NA, t(Number(y))) 但它检索到一个错误...我知道我必须使用 t() 来转置我的 df 但是如何在列之间添加 NA到行?

有什么建议吗?

注意:我不是新手 R 但最近我遇到了一些问题......我在 Whosebug 上搜索了所有但我找不到答案.

这是一个想法,通过 stacking 数据框并使用 ind 和我们的组指标来添加额外的行,即

s_df <- stack(df)
rbind(data.frame(values = NA, ind = NA), do.call(rbind, by(s_df, s_df$ind, rbind, NA)))[1]

这给出了,

      values
1         NA
X1.1       4
X1.2       2
X1.3      NA
X2.3       4
X2.4       3
X2.31     NA
X3.5       4
X3.6       3
X3.3      NA
X4.7       4
X4.8       2
X4.3      NA

免责声明 鸣谢 this answer

您可以将 rbind(NA, dat)unlistuse.name = FALSE 一起使用 - 感谢 @zx8754。

data.frame(X1 = c(unlist(rbind(NA, dat), use.name = FALSE), NA))

结果

#   X1
#1  NA
#2   4
#3   2
#4  NA
#5   4
#6   3
#7  NA
#8   4
#9   3
#10 NA
#11  4
#12  2
#13 NA

c(..., NA) 在向量末尾附加 NA

数据

dat <- structure(list(X1 = c(4L, 2L), X2 = c(4L, 3L), X3 = c(4L, 3L), 
    X4 = c(4L, 2L)), .Names = c("X1", "X2", "X3", "X4"), class = "data.frame", row.names = c("Number", 
"Number.1"))

选择超出范围的行会创建 NA 行,然后 unlist:

data.frame(X1 = c(NA, unlist(dat[1:3, ], use.names = FALSE)))
#    X1
# 1  NA
# 2   4
# 3   2
# 4  NA
# 5   4
# 6   3
# 7  NA
# 8   4
# 9   3
# 10 NA
# 11  4
# 12  2
# 13 NA