繁体   English   中英

R数据框中的动态列

[英]Dynamic columns in R dataframes

我正在玩R数据框,并试图弄清楚它们是如何工作的。 在下面的示例中,我尝试使用1行数据帧来消除向量的元素。 我知道有更好的方法来执行此操作,例如unique()或使用哈希库等。这更多地是关于学习数据帧的工作方式。

如果要添加的列名是字符串,则第一部分工作正常。

> v = c(1, 2, 3, 10, 100, 50, 50, 100, 1, 2, 3, 10)
> d = data.frame(row.names=c('the row'))
> d
data frame with 0 columns and 1 rows
> for (x in v) { d[1,as.character(x)] = x}
> d
        1 2 3 10 100 50
the row 1 2 3 10 100 50

但是,如果我尝试使用数字作为列名,则会出现非常奇怪的行为:

> e = data.frame(row.names=c('the row'))
> for (x in v) { e[1,x] = x}
Error in `[<-.data.frame`(`*tmp*`, 1, x, value = 10) : 
  new columns would leave holes after existing columns
> e
        V1 V2 V3
the row  1  2  3

首先,“ V1”,“ V2”和“ V3”来自何处? 其次,为什么这不起作用? 我的意思是,我可以弄清楚,对于10不是3之后的下一个数字并不满意,但除此之外,我不知道为什么这不起作用。

列只能索引为字符串吗? 其他值得了解的限制?

提前致谢!

要回答V1, V2, V3名称的来源,请检查源代码'[<-.data.frame' ,第139行:

> deparse(`[<-.data.frame`)[139]
[1] "                new.cols <- paste0(\"V\", seq.int(from = nvars + "

至于为什么当e只有3列时e[1,10] = 10不起作用,那根本就没有。 如果您认为这与您先前的结果( d )相矛盾,请键入d[,4]并查看会发生什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM