Database 使用apply-in-R高效地创建多个变量
我有一个数据帧DF,它包含许多变量。每个变量出现两次,因为我正在对“夫妇”进行分析 除其他外,DF有一系列多样性指标:Database 使用apply-in-R高效地创建多个变量,database,r,variables,apply,lapply,Database,R,Variables,Apply,Lapply,我有一个数据帧DF,它包含许多变量。每个变量出现两次,因为我正在对“夫妇”进行分析 除其他外,DF有一系列多样性指标: DF$div1.1, DF$div2.1, .... , DF$divN.1, DF$div.1.2, ..., DF$divN.2 同样,它还有一系列另一个特点的指标: DF$char1.1, DF$char2.1, .... , DF$charM.1, DF$char.1.2, ..., DF$charM.2 以下是指向DF示例的链接: 每次“.1”和“.2”代表所
DF$div1.1, DF$div2.1, .... , DF$divN.1, DF$div.1.2, ..., DF$divN.2
同样,它还有一系列另一个特点的指标:
DF$char1.1, DF$char2.1, .... , DF$charM.1, DF$char.1.2, ..., DF$charM.2
以下是指向DF示例的链接:
每次“.1”和“.2”代表所考虑的夫妻成员
我的目标:
对于每个指标divI和charJ,我想创建另一个变量DF$divchar
,当DF$charJ.1
DF$charJ.2
时,该变量取值DF$divI.1
;和DF$divI.2
当DF$charJ.1
DF$charJ.2
时。存储在DF$CharMax.1
下。
下面是我如何创建它的:
DF$CharMax.1 <- as.data.frame(
sapply(1:length(nam),
function(n)
as.numeric(DF[names(DF)==names.1[n]]
>DF[names(DF)==names.2[n]])
))
NameFull
,其中包含div
和char
的所有可能组合,用“YY”
分隔
当我查看names(DF)
时,我总是用“YY”
然而,如果我显式地调用它们,我确实会得到一个结果
> DF[,"divIYYcharJ"]
如有任何建议、评论和解释,我将不胜感激。我对R很陌生,他更习惯于斯塔塔。我觉得这里有一些非常低效的东西。谢谢只需将data.frame转换为长格式即可。问题就变得很简单了。您应该阅读。
apply(df,1,函数(x){sapply(seq(1,length(x),2),函数(x){ifelse((x[i]>x[i+1]),x[1],x[2])})
尝试对每行中的列进行行操作。假设每一对的列彼此相邻。您还需要确保df只包含特征列。谢谢您的回答@罗兰:我曾考虑过整形手术,但由于我有很多观察(21800对夫妇),我担心整形手术会花很长时间,而且在那之后,所有手术都会花很长时间long@Doon_Bogan如果您使用package data.table,重塑应该几乎是即时的。
NameFull <- sapply(c("div1",...,"divN")
, function(nam) paste(nam, names(DF$YMax.1), sep="YY")
DF[, as.vector(NameFull)] <- lapply(as.vector(NameFull), function(e)
BinaryExtract(DF[,paste0(unlist(strsplit(e,"YY"))[1],".1")]
, DF[, paste0(unlist(strsplit(e,"YY"))[1],".1")]
, DF$charMax.1[unlist(strsplit(e,"YY"))[2]]))
names(DF[, as.vector(NameFull)]) <- as.vector(c("div1",...,"divN"), sapply(, function(nam)
paste(nam, names(DF$YMax.1), sep=".")))
> DF[,"divIYYcharJ"]