簡體   English   中英

擴展R數據的不同方法

[英]Different methods to expand R data

我有以下數據,我想擴展它。 例如,如果June獲得兩次成功,一次失敗,那么我的數據集應如下所示:

month | is_success
------------------
   6  |     T
   6  |     T
   6  |     F

數據集如下:

# Months from July to December
months <- 7:12

# Number of success (failures) for each month
successes <- c(11,22,12,7,6,13)
failures <- c(20,19,11,16,13,10)

示例解決方案如下:

dataset<-data.frame()

for (i in 1:length(months)) {
  dataset <- rbind(dataset,cbind(rep(months[i], successes[i]), rep(T, successes[i])))
  dataset <- rbind(dataset,cbind(rep(months[i], failures[i]), rep(F, failures[i])))
}

names(dataset) <- c("months", "is_success")
dataset[,"is_success"] <- as.factor(dataset[,"is_success"])

問題:重寫此代碼有哪些不同的方法?

我正在尋找一種使用不同但有效的方法(矩陣,循環,應用)的全面解決方案。

謝謝!

這是rep一種方法。 基於1和0的復制,創建帶有“ months”和“ is_success”的數據集。然后按“ successes”,“ failures”的值復制行,並在必要時進行order ,並將行名稱設置為“ NULL”

d1 <- data.frame(months, is_success = factor(rep(c(1, 0), each = length(months))))
d2 <- d1[rep(1:nrow(d1), c(successes, failures)),]
d2 <- d2[order(d2$months),] 
row.names(d2) <- NULL

現在,我們檢查這是否等於從for循環創建的數據

all.equal(d2, dataset, check.attributes = FALSE)
#[1] TRUE

或者按照@thelatemail的建議,可以使用expand.grid創建“ d1”

d1 <- expand.grid(month=months, is_success=1:0)

使用mapply可以嘗試以下操作:

createdf<-function(month,successes,failures){
    data.frame(month=rep(x = month,(successes+failures)), 
               is_success=c(rep(x = T,successes),
                            rep(x = F,failures))
               )
}

現在創建所需的data.frames列表:

lofdf<-mapply(FUN = createdf,months,successes,failures,SIMPLIFY = F)

然后結合使用plyr包的ldply函數:

resdf<-ldply(lofdf,.fun = data.frame)

暫無
暫無

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

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