将NA插入新数据帧中的数据

时间:2019-01-22 09:19:35

标签: r dataframe na

我有这样的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

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

有什么建议吗?

注意::我对R并不陌生,但最近遇到了一些问题...我在StackOverflow上进行了搜索,但找不到答案。

3 个答案:

答案 0 :(得分:3)

这是通过stack设置数据框并使用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

答案 1 :(得分:2)

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

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"))

答案 2 :(得分:2)

选择超出范围的行将创建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