假设我有数据帧df1:
df1
R1
1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
还有另一个数据帧df2:
df2
R1 R2
1 A 2
2 B 5
3 D 7
4 E 9
5 F 12
6 J 16
我如何在df1中创建一个名为R2的新列,该列根据df2 $ R1中的匹配条目将df2 $ R2中的正确值赋予df1 $ R2?无论如何,我最终都会遇到与长度差异有关的错误。但是,有没有一种方法可以强制将df2 $ R2中的值放入df1中的新列中,并且在df1中的任何行中仅包含NA(或NaNs或其他内容),而df2 $ R1中不存在相应的值?并且也要忽略df2中没有对应行的条目(例如,第6行,其中R1 = J,因为df1 $ R1中没有J)。对于我的示例,我想要的数据集如下所示:
R1 R2
1 A 2
2 B 5
3 C NA
4 D 7
5 E 9
6 F 12
7 G NA
8 H NA
因此,基本上,如果df2 $ R1与df1 $ R1相同,则df1 $ R2应该等于df2 $ R2等于。抱歉,如果之前曾有人问过我,我找不到它。谢谢。
这是该match
功能的任务。它的主要用途是生成适当的索引以用于“ [”函数,即用于选择其他元素或行。它是操作中的关键功能merge
,但merge
实际上并不是您想要的功能:
df1 <- read.table(text="R1
1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H", header=TRUE)
df2<- read.table(text=" R1 R2
1 A 2
2 B 5
3 D 7
4 E 9
5 F 12
6 J 16", header=TRUE)
df1$R2 <- df2$R2[ match(df1$R1, df2$R1) ]
df1
#-----------
R1 R2
1 A 2
2 B 5
3 C NA
4 D 7
5 E 9
6 F 12
7 G NA
8 H NA
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句