[英]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.