0
我對整形數據框很感興趣,但我不想使用標準dcast函數(如mean),而是使用自定義函數。具體來說,我有興趣使用ifelse語句來分配二進制值。使用自定義函數(ifelse)和dcast
這裏有一個重複的例子:
# dataframe that includes extraneous information
df <- data.frame(sale_id=c(1,1,1,2,2,2,3,3,4,5),project_id=c(501,502,503,501,502,503,501,502,504,505),
sale_year=c(1990,1991,1993,1990,1992,1990,1991,1993,1990,1992),
var1=c(5,4,3,6,5,4,4,7,2,9),var2=c(7,3,4,8,5,8,2,3,5,7))
# list of the variables I actually need (I don't need 'sale_year')
varlist <- c("var1","var2")
# selecting out id variables and variables I'm interested in manipulating
dfvars <- df[,c("sale_id","project_id",varlist)]
# melt dataframe
library(reshape2)
mdata <- melt(dfvars, id=c('sale_id','project_id'))
# create custom ifelse function, assign '1' if mean is above a critical value, and '0' if not
funx <- function(u){ifelse(mean(u)>5,1,0)}
# cast data using this function
cdata <- dcast(mdata, sale_id~variable, funx)
如果我只是用一個標準功能,如均值(EX),它的工作原理:
cdata <- dcast(mdata, sale_id~variable, mean)
但我ifelse()函數,我得到一個因爲「mean(u)> 5」的結果應該返回一個邏輯結果(TRUE或FALSE),然後被使用的數據類型的錯誤(邏輯與雙精度),這對我來說沒有意義。 ifelse()部分。
我想你可以使用'if_else'從'dplyr'包和避免錯誤。 – eipi10