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