第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

data.frame行到列表

data.frame行到列表

MM們 2019-10-25 15:28:09
我有一個data.frame,我想按行將其轉(zhuǎn)換為列表,這意味著每行將對應(yīng)于其自己的列表元素。換句話說,我想要一個只要data.frame有行的列表。到目前為止,我已經(jīng)按照以下方式解決了這個問題,但是我想知道是否有更好的方法來解決這個問題。xy.df <- data.frame(x = runif(10),  y = runif(10))# pre-allocate a list and fill it with a loopxy.list <- vector("list", nrow(xy.df))for (i in 1:nrow(xy.df)) {    xy.list[[i]] <- xy.df[i,]}
查看完整描述

3 回答

?
墨色風(fēng)雨

TA貢獻(xiàn)1853條經(jīng)驗 獲得超6個贊

像這樣:


xy.list <- split(xy.df, seq(nrow(xy.df)))

而且,如果希望xy.df將行名作為輸出列表的名稱,則可以執(zhí)行以下操作:


xy.list <- setNames(split(xy.df, seq(nrow(xy.df))), rownames(xy.df))


查看完整回答
反對 回復(fù) 2019-10-25
?
人到中年有點(diǎn)甜

TA貢獻(xiàn)1895條經(jīng)驗 獲得超7個贊

今天,我正在為一個具有數(shù)百萬個觀測值和35列的data.frame(實(shí)際上是一個data.table)進(jìn)行此工作。我的目標(biāo)是返回一個data.frames(data.tables)列表,每個列表只有一行。也就是說,我想將每一行拆分為一個單獨(dú)的data.frame并將它們存儲在列表中。


這是我想出的兩種方法,它們的速度大約比split(dat, seq_len(nrow(dat)))該數(shù)據(jù)集快3倍。下面,我在7500行,5列數(shù)據(jù)集上對這三種方法進(jìn)行了基準(zhǔn)測試(虹膜重復(fù)了50次)。


library(data.table)

library(microbenchmark)


microbenchmark(

split={dat1 <- split(dat, seq_len(nrow(dat)))},

setDF={dat2 <- lapply(seq_len(nrow(dat)),

                  function(i) setDF(lapply(dat, "[", i)))},

attrDT={dat3 <- lapply(seq_len(nrow(dat)),

           function(i) {

             tmp <- lapply(dat, "[", i)

             attr(tmp, "class") <- c("data.table", "data.frame")

             setDF(tmp)

           })},

datList = {datL <- lapply(seq_len(nrow(dat)),

                          function(i) lapply(dat, "[", i))},

times=20

這返回


Unit: milliseconds

       expr      min       lq     mean   median        uq       max neval

      split 861.8126 889.1849 973.5294 943.2288 1041.7206 1250.6150    20

      setDF 459.0577 466.3432 511.2656 482.1943  500.6958  750.6635    20

     attrDT 399.1999 409.6316 461.6454 422.5436  490.5620  717.6355    20

    datList 192.1175 201.9896 241.4726 208.4535  246.4299  411.2097    20

盡管差異沒有我以前的測試中的大,但是setDF在max(setDF)<min(split)的運(yùn)行分布的所有級別上,直接方法都明顯更快,并且該attr方法通??靸杀兑陨稀?/p>


第四種方法是極端冠軍,它是一個簡單的嵌套lapply,返回嵌套列表。此方法舉例說明了從列表構(gòu)造data.frame的成本。而且,我使用該data.frame函數(shù)嘗試的所有方法都比data.table技術(shù)慢了一個數(shù)量級。


數(shù)據(jù)


dat <- vector("list", 50)

for(i in 1:50) dat[[i]] <- iris

dat <- setDF(rbindlist(dat))


查看完整回答
反對 回復(fù) 2019-10-25
  • 3 回答
  • 0 關(guān)注
  • 655 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號