簡體   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