fork download
  1.  
  2.  
  3. factory_list <- structure(c(5L, 4L, 2L, 3L, 1L), .Label = c("台北", "台中", "高雄", "新竹", "台南"), class = "factor")
  4. factory_list
  5. mydf <- structure(list(village = structure(c(1L, 2L, 3L, 4L, 5L), .Label = c("台北", "台中", "高雄", "新竹", "台南"),class = "factor"),
  6. rev = c(9.23913043478261,16.3571428571429, 15.6206896551724, 15.0980392156863, 10)),
  7. class = c("tbl_df", "tbl", "data.frame"),
  8. row.names = c(NA, -5L),
  9. .Names = c("factory", "rev"))
  10. mydf
  11. # result as I expexted
  12. mydf[factory_list,]
  13.  
  14.  
  15. mydf_wrong <- structure(list(village = structure(c(1L, 2L, 3L), .Label = c("台北", "台中", "高雄"), class = "factor"),
  16. rev = c(9.23913043478261,16.3571428571429, 15.6206896551724)),
  17. class = c("tbl_df", "tbl", "data.frame"),
  18. row.names = c(NA, -3L),
  19. .Names = c("factory", "rev"))
  20. mydf_wrong
  21. # main problem here:
  22. mydf_wrong[factory_list,]
  23.  
  24.  
  25.  
  26.  
  27. # 補充: 試圖自己重現問題卻得不出正確結果..
  28. factory2 <- as.factor(c("a","b","c"))
  29. mydf2 <- data.frame(factory=as.factor(c("c","a","b")),rev=c(1000,1500,3200))
  30. mydf2[factory2,]
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
Success #stdin #stdout 0.22s 60752KB
stdin
Standard input is empty
stdout
[1] 台南 新竹 台中 高雄 台北
Levels: 台北 台中 高雄 新竹 台南
  factory      rev
1    台北  9.23913
2    台中 16.35714
3    高雄 15.62069
4    新竹 15.09804
5    台南 10.00000
  factory      rev
5    台南 10.00000
4    新竹 15.09804
2    台中 16.35714
3    高雄 15.62069
1    台北  9.23913
  factory      rev
1    台北  9.23913
2    台中 16.35714
3    高雄 15.62069
     factory      rev
NA      <NA>       NA
NA.1    <NA>       NA
2       台中 16.35714
3       高雄 15.62069
1       台北  9.23913
  factory  rev
1       c 1000
2       a 1500
3       b 3200