我正在玩 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 之后的下一个数字并不高兴,但除此之外,我不知道为什么这不起作用。
列只能作为字符串索引吗?其他值得了解的限制?
提前致谢!