合并在R中产生意外结果

Jef*_*son 4 r data-management

我想合并:

to_graph <- structure(list(Teacher = c("BS", "BS", "FA"
), Level = structure(c(2L, 1L, 1L), .Label = c("BE", "AE", "ME", 
"EE"), class = "factor"), Count = c(2L, 25L, 28L)), .Names = c("Teacher", 
"Level", "Count"), row.names = c(NA, 3L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

graph_avg <- structure(list(Teacher = structure(c(1L, 1L, 2L), .Label = c("BS", 
"FA"), class = "factor"), Count.Fraction = c(0.0740740740740741, 
0.925925925925926, 1)), .Names = c("Teacher", "Count.Fraction"
), row.names = c(NA, -3L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

merge(to_graph, graph_avg, by="Teacher"),但不是得到我期望的(3行),我得到:

  Teacher Level Count Count.Fraction
1      BS    AE     2     0.07407407
2      BS    AE     2     0.92592593
3      BS    BE    25     0.07407407
4      BS    BE    25     0.92592593
5      FA    BE    28     1.00000000
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢!

Joh*_*ohn 6

不确定你想要完成什么. merge正在做它应该在这里做的事情.

我们来看看所有的data.frames

graph_avg
  Teacher Count.Fraction
1      BS     0.07407407
2      BS     0.92592593
3      FA     1.00000000

to_graph
  Teacher Level Count
1      BS    AE     2
2      BS    BE    25
3      FA    BE    28

merge(to_graph, graph_avg)
  Teacher Level Count Count.Fraction
1      BS    AE     2     0.07407407
2      BS    AE     2     0.92592593
3      BS    BE    25     0.07407407
4      BS    BE    25     0.92592593
5      FA    BE    28     1.00000000
Run Code Online (Sandbox Code Playgroud)

现在,如果我要合并那些我必须要看,看看什么是常见的,我将得到什么结果.老师,你们两个都有.但是,如果我尝试合并教师,我该怎么办?BS没有唯一的标识符,它在两个data.frames中都出现两次.如果它出现在其中一个中,那将很容易解决.所以,我去检查并说,好吧,我在一个data.frame,level ...中有一个唯一的标识符,它会做到这一点......然后去做一些不会丢失任何数据的东西. merge对于你拥有一个小数据框架的情况来说真的很方便,就像每个老师都说过一次,它有教师的年龄或性别.您可以将其合并到您的另一个data.frame中,并对教师进行重复测量,每次教师出现时您都会知道这些.但是对于你正在做的事情,这不是正确的工具.

merge这不是你想要的.如果这些确实是您的data.frames使用cbind.

cbind(to_graph, graph_avg$Count.Fraction)

  Teacher Level Count Count.Fraction
1      BS    AE     2     0.07407407
2      BS    BE    25     0.92592593
3      FA    BE    28     1.00000000
Run Code Online (Sandbox Code Playgroud)

这可能就是你要找的东西.