我有两个数据帧(DfA和DfB)。每个数据框都有三个因子变量:种类,类型和区域。 DfA还有一个数值列,我想根据共享属性使用它来估算DfB新列中的数值。
我有一个函数,要求物种,类型和区域,然后创建具有这些属性的DfA子集,并在子集上运行算法来估计新值。当我运行该函数并手动指定值作为测试时,它可以正常工作。
如果DfB中的所有因子级别和组合在DfA中都具有匹配因子,则该函数与mapply一起正常工作。但是如果DfB中的任何行包含DfA中不存在的因子级别,则会出现错误(级别因子集不同)。示例:如果DfA包含区域A,B和C的数据,并且DfB包含区域A,B,C和D的数据,则mapply返回错误;如果我删除带有区域D的行,则mapply函数可以正常工作。
如果该行包含使该函数无法使用的因子级别,可以跳过它或将NA放入其中并继续在该函数所用的行上运行该函数,该如何指定?
答案 0 :(得分:0)
您可以删除/添加您的data.frames级别,以确保您的功能正常工作,而不是满足特殊情况:
# dropping and setting levels
Z = as.factor(sample(LETTERS[1:5],20,replace=T))
levels(Z)
Y = as.factor(Z[-which(Z %in% LETTERS[4:5])])
levels(Y)
Y=droplevels(Y) # drop the levels
levels(Y)
levels(Y) = levels(Z) # bring them back
levels(Y)
Y = factor(Y,levels=LETTERS[1:7]) # expand them
levels(Y)
attr(Y,"levels")
attr(Y,"levels") = LETTERS[1:8] # keep expanding them
levels(Y)
require(plyr)
Y = mapvalues(Y,levels(Y),letters[1:length(levels(Y))]) # change the labels of the levels
levels(Y)
x<-factor(Y, labels=LETTERS[(length(unique(Y))+1):(2*length(unique(Y)))]) # change the labels of the levels on another variable
在你的情况下:
dfa = data.frame("LVL1"=as.factor(sample(LETTERS[1:2],20,replace=T)))
dfb = data.frame("LVL2"=as.factor(sample(LETTERS[2:5],20,replace=T)))
newLevels = sort(unique(union(levels(dfa$LVL1),levels(dfb$LVL2))))
dfa$LVL1 = factor(dfa$LVL1,levels=newLevels)
dfb$LVL2 = factor(dfb$LVL2,levels=newLevels)