我有这样的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上进行了搜索,但找不到答案。
答案 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)
和unlist
与use.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