R:通过合并来自另一个数据集的值对变量进行部分重新编码
我甚至不知道该怎么问这个问题,所以请耐心听我说 我注意到我正在处理的数据集中有一个错误,ANES累积文件。在数据集中的某一年(2004年),一个变量(我将其重命名为“grewup”)的值被意外遗漏,因此该年的值仅为“NA”。其他年份的值都存在,因此数据集基本上如下所示: 我确实有另一个数据集,它只包含2004个数据集,并且缺少“grewup”的值。我想做的是使用第二个数据集中的值重新编码2004年的NAs。我该怎么做?同样,这些值在剩余年份的累积数据集中;我只想为2004年重新编码,而不考虑其他值 谢谢 一些澄清和补充:R:通过合并来自另一个数据集的值对变量进行部分重新编码,r,merge,recode,R,Merge,Recode,我甚至不知道该怎么问这个问题,所以请耐心听我说 我注意到我正在处理的数据集中有一个错误,ANES累积文件。在数据集中的某一年(2004年),一个变量(我将其重命名为“grewup”)的值被意外遗漏,因此该年的值仅为“NA”。其他年份的值都存在,因此数据集基本上如下所示: 我确实有另一个数据集,它只包含2004个数据集,并且缺少“grewup”的值。我想做的是使用第二个数据集中的值重新编码2004年的NAs。我该怎么做?同样,这些值在剩余年份的累积数据集中;我只想为2004年重新编码,而不考虑其他
- 我只想从第二个数据集中引入这一个变量,以避免使第一个数据集变得比现在更庞大和内存消耗(951列)。实际上还有很多其他的变量,它们或者我已经有了
- 此外,虽然2004年的所有值都是NAs,但数据集中并非每个NA都是2004年的。在过去的几年里,有一些是合法的价值缺失
merge(dat1,dat2,by=c("id", "year"),all.x=TRUE) # and "outer join"
id year grewup.x grewup.y
1 1 2002 127 NA
2 2 2002 310 NA
3 3 2004 NA 438
4 4 2004 NA 834
5 5 2008 332 NA
6 6 2008 614 NA
datm <- merge(dat1,dat2,by=c("id", "year"),all.x=TRUE)
# No "fill in the blanks
datm[is.na(datm$grewup.x), "grewup.x"] <- datm[is.na(datm$grewup.x), "grewup.y"]
# Notice that the logical index is the same on both sides of the assignment
datm[ ! names(datm) %in% 'grewup.y' ] # drop the supplementary column
id year grewup.x
1 1 2002 127
2 2 2002 310
3 3 2004 438
4 4 2004 834
5 5 2008 332
6 6 2008 614
merge(dat1,dat2,by=c(“id”,“year”),all.x=TRUE)#和“外部连接”
id年份grewup.x grewup.y
1 1 2002 127 NA
2 2002 310 NA
3 3 2004 NA 438
4 2004 NA 834
5 5 2008 332 NA
6 2008 614 NA
datm他们每年的观察次数是否相同?发布数据框架否,两个数据集每年的观察次数都不相同。在第一个数据集中,每年的病例从大约200例到2700多例不等。第二个数据集仅用于2004年。(如果你问他们在2004年是否有相同数量的观察结果,那么是的,他们有。)哦,那就简单多了,看看下面的答案为什么?如果数据的结构很简单,仅当ID完全相同且顺序相同时,dat1[dat1$year%in%2004,]$grewup。我认为这是有道理的,但我有一个问题:这会把两个数据集中的每个变量合并在一起吗?我使用的数据示例是一个非常非常精简的版本。第一个数据集中实际上有951个变量(和49760个观测值),而第二个数据集中有1197个变量。这将创建更宽的数据框(951+1197-2)列。它需要使用lappy和一个设计用于处理成对列名的函数。寓意:您应该始终提供足够复杂的数据集。
merge(dat1,dat2,by=c("id", "year"),all.x=TRUE) # and "outer join"
id year grewup.x grewup.y
1 1 2002 127 NA
2 2 2002 310 NA
3 3 2004 NA 438
4 4 2004 NA 834
5 5 2008 332 NA
6 6 2008 614 NA
datm <- merge(dat1,dat2,by=c("id", "year"),all.x=TRUE)
# No "fill in the blanks
datm[is.na(datm$grewup.x), "grewup.x"] <- datm[is.na(datm$grewup.x), "grewup.y"]
# Notice that the logical index is the same on both sides of the assignment
datm[ ! names(datm) %in% 'grewup.y' ] # drop the supplementary column
id year grewup.x
1 1 2002 127
2 2 2002 310
3 3 2004 438
4 4 2004 834
5 5 2008 332
6 6 2008 614