簡體   English   中英

使用列名作為變量創建data.table

[英]Create data.table with column names as variable

我有一個尷尬的問題,我想了解為什么它不起作用。

test <- rbind(test, data.table(evalq(names(test)[1]) = rep("", 5), 
                               evalq(names(test)[2]) = rep("", 5)))

問題來自於此:

data.table(evalq(names(test)[1]) = rep("", 5), 
                                   evalq(names(test)[2]) = rep("", 5)))

我試圖通過eval(names(test)[1])names(test)[1]代替evalq(names(test)[1]) ,但是沒有任何方法可以解決此問題。

奇怪的是,這個版本可以正常工作:

data.table("var1" = rep("", 5), "var2" = rep("", 5)))

謝謝你的幫助:)

names(test)[1]是錯誤的,因為您指向列名並且沒有提取要用作變量的列名。 來自?evalq

evalq形式等效於eval (quote(expr),...)。 eval在將其傳遞給評估器之前先評估當前范圍內的第一個參數: evalq避免了這一點。

之后,

evalenvir指定的envir評估expr參數,並返回計算值。

您不能將其用作列表的變量名。 我認為它僅在環境級別有效。

如果要將可變名稱用作來自姓氏的信息,可以執行以下操作:

assign(names(test)[1], rep("", 5))

但這不適用於您的情況,因為它始終與環境有關。

執行此:

test <- rbind(test, data.table(assign(names(test)[1], rep("", 5)), 
                               assign(names(test)[2], rep("", 5))))

您將有一個錯誤,但是在全局環境中您還將有2個變量,它們的names(test)[1]names(test)[2]包含5次“”。

如果您沒有手動設置的姓氏,則可以執行以下操作:

測試數據框

  test<-data.frame(Date=c("Jan-2002","Feb-2002","Mar-2002","Apr-2002","May-2002","Jun-2002"),
                        "Value"=c(3.1,2.86,3.37,3.8,3.78,3.61))

使用結合rbindlist從包data.table

test <- rbindlist(list(test, data.frame(cbind(rep("", 5),rep("", 5)))),use.names = F)

輸出

test
        Date Value
 1: Jan-2002   3.1
 2: Feb-2002  2.86
 3: Mar-2002  3.37
 4: Apr-2002   3.8
 5: May-2002  3.78
 6: Jun-2002  3.61
 7:               
 8:               
 9:               
10:               
11:               

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM