我有一个包含大量变量的数据帧DF。每个变量都出现两次,因为我正在对#34;夫妇进行分析。
其中,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示例的链接:http://shorttext.com/5d90dd64
每次" .1"," .2"代表夫妻成员考虑。
我的目标:
对于每个指标divI和charJ,我想创建另一个变量DF$divchar
,在DF$divI.1
> DF$charJ.1
时获取值DF$charJ.2
; DF$divI.2
< DF$charJ.1
时的DF$charJ.2
。
这是我提出的解决方案,似乎有些错综复杂,有时表现得很奇怪:
我创建了一系列二进制变量,如果DF$charJ.1
> DF$charJ.2
,则值为1。它们存储在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]])
))
我创建了函数BinaryExtract
:
BinaryExtract <- function(var1, var2, extract) {var1*extract +var2*(1-extract)}
我创建了矩阵NameFull
,其中包含div
和char
的所有可能组合,以"YY"
分隔
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]]))
我的问题
一个。对于简单的事情来说,它看起来是一个非常复杂的解我错过了什么?
B中。此外,当我打印DF时,只需在命令窗口中键入DF
,我就看不到变量NameFull
。它们似乎以char
的名称出现。
这就是我得到的:http://shorttext.com/5d9102c
同样,我试图改变他们的所有名字,以摆脱&#34; YY&#34;它似乎不起作用:
names(DF[, as.vector(NameFull)]) <- as.vector(c("div1",...,"divN"), sapply(, function(nam)
paste(nam, names(DF$YMax.1), sep=".")))
当我查看names(DF)
时,我会继续使用"YY"
但是,如果我明确地要求他们,我会得到一个结果
> DF[,"divIYYcharJ"]
我真的很感激任何建议,评论和解释。我很新R广告更习惯于Stata。我觉得这里有一些非常低效的东西。感谢