[英]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.