我敢肯定我可以直接解决这个问题的解决方案,但是我没有看到一个可比的问题,所以我想我会发布一个问题。
我有一个纵向数据集,其中有数千名受访者在几个时间间隔内。从问题到数据类型的所有事物之间的所有内容都可能有所不同,并且通常需要构建一系列的布尔来构建指标或虚拟变量,但是每个受访者都有一个唯一的ID,没有其他受访者在第一个波浪之后添加了调查,因此很容易,因此够了。
问题是,虽然早期波由一个(Stata(每个文件组成,但后者的浪潮包含许多附录文件,结构性不同。因此,例如,在为以前的伴侣的性别构建先前的指标时,有列(一个波(称为partnernum和sex,每个唯一的ID(受访者(最多有16行。足够容易地传播(或铸造(该数据,能够为每个唯一ID和列partnernum_1 ... partnernum_16创建一行,其中来自性爱列中的值作为panteraldf中的条目。然后易于构造指标:
sexuality$newIndicator[mainDF$bioSex = "Male" & apply(partnerDF[1:16] == "Male", 1, any)] <- 1
对于最后两个浪潮中的其他附录文件,数据像合作伙伴数据一样长,每个唯一的ID都有多行,但是我不仅要使用一个变量,而且我需要使用数百个来对抗构造指标,所有这些指标都用不同的类型编码,因此扩展(或铸造(宽的数据是不切实际的(不用介意编写这些布尔(。实际上,每个浪潮中有几个文件,它们的结构方式仅占据1行(唯一ID(,其中一些几十个。(我已经将每个波的附录文件放在一起。(
我想做的就是测试以下内容:
newDF$indicator[any(waveIIIAdds$var1 == 1) & any(waveIIIAdds$var2 == 1)] <- 1
或
newDF$indicator[mainDF$var1 == 1 & any(waveIIIAdds$var2 == 1)] <- 1
其中newDF与aindf的长度相同(每个唯一ID(。
所以,例如,如果我有两个DFS。
df1 <- data.frame(ID = c(1:4), A = rep("a"))
df2 <- data.frame(ID = rep(1:4, each=2), B = rep(1:2, 2), stringsAsFactors = FALSE)
df1$A[1] <- "b"
df1$A[3] <- "b"
df2$B[8] <- 3
> df1 > df2
ID A ID B
1 b 1 1
2 a 1 2
3 b 2 1
4 a 2 2
3 1
3 2
4 1
4 3
我想像(假设DF3有一列,只是DF1的唯一ID(
df3$new <- 0
df3$new[df1$ID[df1$A == "a"] & df2$ID[df2$B == 2]] <- 1
使DF3每行具有一个唯一的ID,并且由于所有ID中的DF1 $ A中有一个" A",但DF1 $ A [1]和至少一排Df2 $ b的df1 $ a [1]除了最后一个ID(DF2 $ B [7:8](结果是:
> df3
ID new
1 0
2 1
3 1
4 0
和
df3$new <- 0
df3$new[df1$ID[df1$A == "a"] | df2$ID[df2$B == 2]] <- 1
> df3
ID new
1 1
2 1
3 1
4 0
这样做...
df3 <- data.frame(ID=unique(df1$ID),
new=sapply(unique(df1$ID),function(x)
as.numeric(x %in% df1$ID[df1$A == "a"] & x %in% df2$ID[df2$B == 2])))
df3
ID new
1 1 1
2 2 1
3 3 1
4 4 0
我想出了一个简约的解决方案,在返回问题后几分钟考虑了(而不是帖子的早晨的凌晨(。
我想要一些研究生,他们可能会以这种方式构建数千个指标或虚拟变量,并且可能会首先学习R,甚至只能学习R。以下提供了使用相同模式的示例和实际数据的解决方案:
如果已经使用IDS创建了DF,并且如示例所假设的那样,已启动的虚拟指示器的列值:
:df3 <- data.frame(ID = df1$ID)
df3$new <- 0
我的解决方案是:
df3$new[df1$ID %in% df1$ID[df1$A == "a"] & df1$ID %in% df2$ID[df2$B == 2]] <- 1
> df3
ID new
1 0
2 1
3 0
4 1
使用|(或(:
df3$new[df1$ID %in% df1$ID[df1$A == "a"] | df1$ID %in% df2$ID[df2$B == 2]] <- 1
> df3
ID new
1 1
2 1
3 0
4 1