【发布时间】:2018-05-08 18:43:47
【问题描述】:
我有这个创建矩阵和数据框的简单代码:
mat=matrix(rnorm(40*5), ncol=5)
df=as.data.frame(mat)
df2 <- tidyr::gather(df, "x", "y", V1:V5)
这是mat创建的head(df):
V1 V2 V3 V4 V5
1 0.97111725 0.12937942 -0.89643594 -0.30144874 0.10405400
2 0.68372321 -0.08049954 -0.52891953 -0.56752185 -1.04425728
3 1.04553733 0.24499356 0.25919424 -1.51280159 0.70952009
4 0.16433896 -0.46727565 -0.22030923 1.18732203 0.17529333
5 -1.73732058 0.04977374 1.54042252 -1.27585563 -1.05846972
6 0.35953274 3.09224985 -1.24524965 -0.67492542 -0.68065365
然后我创建另一个数据框df2,在其中将值收集到x 和y 的两列中。
df2 <- tidyr::gather(df, "x", "y", V1:V5)
当我得到矩阵具有不同列数的新数据集时,我必须将df2 的列的值更改为另一个数字。
示例:这里我使用 V5,因为我有 5 列:df2 <- tidyr::gather(df, "x", "y", V1:V5) 所以现在如果我得到一个有 40 列的新矩阵,我必须手动将其更改为 V20:@ 987654331@。
有没有办法像这样写:df2 <- tidyr::gather(df, "x", "y", V1:V+ncol(mat)
【问题讨论】:
-
您正在收集所有列,因此您可以将该参数留空...
tidyr::gather(df, "x", "y")? -
这似乎有效:
df2 <- tidyr::gather(df, "x", "y", "V1":"V5")。您可以将其扩展为简单地放入您想要作为字符的第一列,然后放入最后一列