簡體   English   中英

坦率 - 在 R 中指定 data.table 中的多個列

[英]frank - specifying multiple columns from data.table in R

我對frank的 function 感到困惑。 這里的文檔說:

僅適用於列表、data.frames 和 data.tables。 計算排名所依據的列。 不要引用列名。 如果... 缺失,則默認考慮所有列。 要按列降序排序前綴“-”,例如 frank(x, a, -b, c)。 當 b 也是字符類型時, -b 也有效。

所以我有我的數據:

structure(list(product = c("Product 1", "Product 1", "Product 1", 
                           "Product 1", "Product 1", "Product 5", "Product 5", "Product 5", 
                           "Product 5", "Product 5"), policyID = c("A738-33", "A738-33", 
                                                                   "A738-33", "A738-33", "A738-33", "A738-33", "A738-33", 
                                                                   "A738-33", "A738-33", "A738-33"), startYear = c(2014, 
                                                                                                                               2015, 2016, 2017, 2018, 2014, 2015, 2016, 2017, 2018), total = c("30000", 
                                                                                                                                                                                                     "30000", "30000", "30000", "30000", "10000", "10000", "10000", 
                                                                                                                                                                                                     "10000", "10000"), daily = c("150", "150", "150", "150", "150", 
                                                                                                                                                                                                                                     "80", "80", "80", "80", "80")), class = c("data.table", "data.frame"
                                                                                                                                                                                                                                     ), row.names = c(NA, -10L), .internal.selfref = <pointer: 0x7feec50126e0>, sorted = "product")

我想按列totaldaily對這些數據進行排序。 所以我這樣做了:

> setDT(testDT)
> frankv(testDT, totallimit, rbddaily, ties.method="dense")
Error in colnamesInt(x, cols, check_dups = TRUE) : 
  argument specifying columns specify non existing column(s): cols[1]='30000'

奇怪的是,當我使用引號時,與文檔所說的完全相反,我得到了結果:

frankv(testDT, cols=c("totallimit", "rbddaily"), ties.method="dense")

我還嘗試將thin集成到data.table中,又發生了一件奇怪的事情。 從我擁有的 10 行數據中,我獲得了 100 行。

testDT[,.(rank = frankv(testDT, cols=c("limit", "daily"), ties.method="dense")), by = c("policyID", "product", "startYear")]

我做錯了什么,我該如何解決? 該文檔沒有太大幫助,也許我遺漏了一些東西......

對於frank ,您不應該引用,但對於frankv (您使用的 function),您應該:

library(data.table)
frank(testDT, total, daily, ties.method="dense")

 [1] 2 2 2 2 2 1 1 1 1 1

frankv(testDT, cols=c("total", "daily"), ties.method="dense")

 [1] 2 2 2 2 2 1 1 1 1 1

暫無
暫無

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

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