1
如何使一個data.table具有大部分數值,只轉換一列的子集並將它們放回原始數據表?通常,我不想將任何彙總統計信息作爲單獨的列添加,只需交換已轉換的統計信息即可。data.table:用函數逐行轉換列的子集
假設我們有一個DT。它有1列名稱和10列數值。我對基數R的「縮放」函數對該數據表的每一行感興趣,但僅適用於這10個數字列。
並在此擴展。如果我有一個包含更多列的數據表,並且我需要使用列名稱來說明應用該函數的數據點的縮放函數?
通過定期data.frame我只想做:
df[,grep("keyword",colnames(df))] <- t(apply(df[,grep("keyword",colnames(df))],1,scale))
我知道這看起來繁瑣,但總是爲我工作。但是,我無法找到在data.tables中執行此操作的簡單方法。
我會像這樣的事情,爲data.tables工作:
dt[,grep("keyword",colnames(dt)) := scale(grep("keyword",colnames(dt)),center=F)]
但事實並非如此。
編輯:
做的另一個例子,更新列與他們的每行縮放版本:
DT = data.table對象
dt[,grep("keyword",colnames(dt),value=T) := as.data.table(t(apply(dt[,grep("keyword",colnames(dt)),with=F],1,scale)))]
它需要「爲太糟糕.data.table「部分,因爲來自apply函數的轉置值是一個矩陣。在更新列時,data.table可能會自動將矩陣強制轉換爲data.tables?
感謝您的幫助!你認爲有一種更短的(或單行)的方式來做到這一點?鑑於任務的簡單性,似乎有點精細。 –
@PiotrGrabowski,很高興如果它幫助你,我不明白你爲什麼刪除了你的問題。這可能對其他人有幫助。這可能可能是單線,但我認爲這會使代碼不太清晰。 – Cath
我刪除了它,因爲我得到了一個downvote,所以我認爲這個問題是低「質量」可以這麼說。不過,我還發現了一種做我正在尋找的方法,我將追加到我原來的帖子中。謝謝! –