为什么在尝试向数据帧中添加变量时match函数返回NA?

时间:2019-06-19 11:20:37

标签: r merge

我有一个包含一个变量“标签”的数据框,并希望基于来自另一个数据框的信息(它也包含“标签”变量)添加另一个变量“性别”。我通常使用match函数,并且正常运行。但是,这一次它将添加变量,但将NA作为值。我想这是一个基本问题,但我找不到解决办法。

df1
   label
1  HDJ3
2  K4JS
3  SO25
4  L9HW

df2
   label  gender
1  SO25   m
2  HDJ3   f
3  L9HW   f
4  K4JS   m

df1$gender <- df2$gender[match(df1$label, df2$label)]

我想要的是

df1
   label  gender
1  HDJ3   f
2  K4JS   m
3  SO25   m
4  L9HW   f

我得到的是

df1
   label  gender
1  HDJ3   NA
2  K4JS   NA
3  SO25   NA
4  L9HW   NA

编辑:变量是所有因素。我已经尝试过将它们更改为字符,但这也不起作用。我也尝试过合并功能,但是在这种情况下,数据框完全为空,仅包含变量名。如果有人可以帮助我,我会很高兴。如果在此之前已被要求,请先谢谢并道歉。

** Edit2:数据框的结构显示出变量之间的差异:

> dput(df1) 
structure(list(label = structure(c(31L, 25L, 7L, 12L, 15L, 32L, 
33L, 24L, 14L, 17L, 1L, 28L, 20L, 6L, 11L, 19L, 9L, 16L, 22L, 
37L, 26L, 39L, 34L, 29L, 13L, 5L, 36L, 4L, 18L, 2L, 23L, 30L, 
3L, 8L, 35L, 27L, 10L, 38L, 21L), .Label = c("09YG", "0FWR", 
"0PZS", "4L78", "56C9", "5B1K", "5CL9", "5RJG", "696K", "8ZOQ", 
"92MB", "95KI", "99H5", "9VOZ", "A8KP", "A9ME", "APA5", "BVDN", 
"DI7S", "E4MS", "EPTR", "H34H", "HRTI", "JLSK", "K472", "KWWO", 
"MHAF", "PSK5", "Q6A4", "S2CK", "S7RU", "SK7H", "SRS8", "TCFS", 
"VQFM", "VWV4", "Z1GE", "ZGBU", "ZQZ7"), class = "factor")), row.names = c(NA, 
-39L), class = "data.frame")

> dput(df2)
structure(list(label = c("S7RU    ", "K472    ", "5CL9    ", 
"95KI    ", "A8KP    ", "-99     ", "SK7H    ", "SRS8    ", "JLSK    ", 
"95KI    ", "-99     ", "9VOZ    ", "APA5    ", "09YG    ", "PSK5    ", 
"E4MS    ", "5B1K    ", "92MB    ", "DI7S    ", "JLSK    ", "696K    "
), gender = c(3, 2, 3, 3, 3, 2, 3, 3, 3, 3, 3, 2, 3, 2, 3, 2, 
3, 2, 3, 3, 3)), row.names = c(NA, -21L), class = "data.frame")

我看到的问题是第二个变量中的空格。谁能告诉我这来自哪里以及如何解决?

0 个答案:

没有答案