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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

合并兩個(gè)不同長(zhǎng)度的數(shù)據(jù)幀

合并兩個(gè)不同長(zhǎng)度的數(shù)據(jù)幀

千巷貓影 2019-11-18 14:23:49
我有兩個(gè)數(shù)據(jù)框。第一個(gè)只有一列十行。第二個(gè)是3列50行。當(dāng)我嘗試通過(guò)使用進(jìn)行組合時(shí)cbind,出現(xiàn)以下錯(cuò)誤:data.frame(...,check.names = FALSE)錯(cuò)誤:誰(shuí)能建議另一個(gè)功能來(lái)做到這一點(diǎn)?PS我也嘗試過(guò)使用列表,但這給出了同樣的錯(cuò)誤。當(dāng)我使用該write.table函數(shù)編寫(xiě)代碼時(shí),由3列組成的數(shù)據(jù)框應(yīng)為CSV文件中的前3列,而具有一列的數(shù)據(jù)框應(yīng)為該文件中的第四列。前三列有50行,第四列應(yīng)占前10行。
查看完整描述

3 回答

?
MM們

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊

在plyr包中,有一個(gè)函數(shù)rbind.fill將合并data.frames并NA為空單元格引入:


library(plyr)

combined <- rbind.fill(mtcars[c("mpg", "wt")], mtcars[c("wt", "cyl")])

combined[25:40, ]


    mpg    wt cyl

25 19.2 3.845  NA

26 27.3 1.935  NA

27 26.0 2.140  NA

28 30.4 1.513  NA

29 15.8 3.170  NA

30 19.7 2.770  NA

31 15.0 3.570  NA

32 21.4 2.780  NA

33   NA 2.620   6

34   NA 2.875   6

35   NA 2.320   4


查看完整回答
反對(duì) 回復(fù) 2019-11-18
?
莫回?zé)o

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

鑒于后續(xù)評(píng)論,我尚不清楚OP實(shí)際執(zhí)行的操作。他們實(shí)際上可能正在尋找一種將數(shù)據(jù)寫(xiě)入文件的方法。


但是,讓我們假設(shè)我們確實(shí)是在尋找cbind一種不同長(zhǎng)度的多個(gè)數(shù)據(jù)幀的方法。


cbind最終會(huì)致電data.frame,其幫助文件中顯示:


傳遞給data.frame的對(duì)象應(yīng)該具有相同的行數(shù),但是,如果有必要,我保護(hù)的原子向量,因子和字符向量將被回收多次(包括從R 2.9.0版開(kāi)始,包括列表參數(shù)的元素)。


因此在OP的實(shí)際示例中,應(yīng)該不會(huì)有錯(cuò)誤,因?yàn)镽應(yīng)該將較短的向量回收為長(zhǎng)度為50的。確實(shí),當(dāng)我運(yùn)行以下命令時(shí):


set.seed(1)

a <- runif(50)

b <- 1:50

c <- rep(LETTERS[1:5],length.out = 50)

dat1 <- data.frame(a,b,c)

dat2 <- data.frame(d = runif(10),e = runif(10))

cbind(dat1,dat2)

我沒(méi)有任何錯(cuò)誤,較短的數(shù)據(jù)幀也按預(yù)期回收。但是,當(dāng)我運(yùn)行此命令時(shí):


set.seed(1)

a <- runif(50)

b <- 1:50

c <- rep(LETTERS[1:5],length.out = 50)

dat1 <- data.frame(a,b,c)

dat2 <- data.frame(d = runif(9), e = runif(9))

cbind(dat1,dat2)

我收到以下錯(cuò)誤:


Error in data.frame(..., check.names = FALSE) : 

  arguments imply differing number of rows: 50, 9

但是R的奇妙之處在于,即使您不希望這樣做,也可以使它幾乎可以做任何您想做的事情。例如,這是一個(gè)簡(jiǎn)單的函數(shù),它將cbind對(duì)長(zhǎng)度不均勻的數(shù)據(jù)幀進(jìn)行數(shù)據(jù)處理,并使用NAs 自動(dòng)填充較短的幀:


cbindPad <- function(...){

args <- list(...)

n <- sapply(args,nrow)

mx <- max(n)

pad <- function(x, mx){

    if (nrow(x) < mx){

        nms <- colnames(x)

        padTemp <- matrix(NA, mx - nrow(x), ncol(x))

        colnames(padTemp) <- nms

        if (ncol(x)==0) {

          return(padTemp)

        } else {

        return(rbind(x,padTemp))

          }

    }

    else{

        return(x)

    }

}

rs <- lapply(args,pad,mx)

return(do.call(cbind,rs))

}

可以這樣使用:


set.seed(1)

a <- runif(50)

b <- 1:50

c <- rep(LETTERS[1:5],length.out = 50)

dat1 <- data.frame(a,b,c)

dat2 <- data.frame(d = runif(10),e = runif(10))

dat3 <- data.frame(d = runif(9), e = runif(9))

cbindPad(dat1,dat2,dat3)

我不能保證此功能在所有情況下都有效。它僅作為示例。


編輯


如果主要目標(biāo)是創(chuàng)建一個(gè)csv或文本文件,那么您要做的所有事情都會(huì)將功能更改為pad ""而不是NA,然后執(zhí)行以下操作:


dat <- cbindPad(dat1,dat2,dat3)

rs <- as.data.frame(apply(dat,1,function(x){paste(as.character(x),collapse=",")}))

然后write.table在上使用rs。


查看完整回答
反對(duì) 回復(fù) 2019-11-18
?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊

我的想法是獲取所有data.frames的最大行數(shù),然后根據(jù)需要將空矩陣追加到每個(gè)data.frame。此方法不需要其他程序包,僅使用base。代碼如下:


list.df <- list(data.frame(a = 1:10), data.frame(a = 1:5), data.frame(a = 1:3))


max.rows <- max(unlist(lapply(list.df, nrow), use.names = F))


list.df <- lapply(list.df, function(x) {

    na.count <- max.rows - nrow(x)

    if (na.count > 0L) {

        na.dm <- matrix(NA, na.count, ncol(x))

        colnames(na.dm) <- colnames(x)

        rbind(x, na.dm)

    } else {

        x

    }

})


do.call(cbind, list.df)


#     a  a  a

# 1   1  1  1

# 2   2  2  2

# 3   3  3  3

# 4   4  4 NA

# 5   5  5 NA

# 6   6 NA NA

# 7   7 NA NA

# 8   8 NA NA

# 9   9 NA NA

# 10 10 NA NA


查看完整回答
反對(duì) 回復(fù) 2019-11-18
  • 3 回答
  • 0 關(guān)注
  • 939 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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