[英]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
避免了這一點。
之后,
eval
在envir
指定的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.