2017-06-29 15 views
1

これらの2つのデータセットをどのようにしてaとbでマージできるのかと思いました。 a fデータセットの列は区間の下限なので、fから1、gから4.4、fから4、gから9.8、fから9などを含むデータセットから1.5をマージする必要があります。間隔に基づいて2つのデータセットをマージする

a<-seq(1:10) 
b<-c("a","b","a","b","a","a","a","b","b","a") 
f<-data.frame(a,b) 

a<-c(1.5,1.4,2.3,2.2,4.4,4,5,6.6,9.8,4.1,4.6,5.5) 
b<-c("a","b","b","b","a","b","a","b","a","b","a","b") 
m<-seq(1:12) 
g<-data.frame(a,b,m) 

答えて

0

あなたがここで探しているものを正確にはわかりませんが、floor()関数は必要なものを提供します。特に、データ操作の場合はtidyverse、一般的にはdplyrを調べることもできます。

出力として期待しているものが完全にはっきりしていません。bの列は、マージ後にちょっと違います。一致するレコードのみが必要でしたか?一致しないレコードを気にしない場合は、all.xall.yのパラメータを削除します。また、列の名前を変更することが順調であることが前提です:

a <- seq(1:10) 
b <- c("a", "b", "a", "b", "a", "a", "a", "b", "b", "a") 
f <- data.frame(a, b) 

a <- c(1.5, 1.4, 2.3, 2.2, 4.4, 4, 5, 6.6, 9.8, 4.1, 4.6, 5.5) 
b <- c("a", "b", "b", "b", "a", "b", "a", "b", "a", "b", "a", "b") 
m <- seq(1:12) 
g <- data.frame(a, b, m) 

## floor function takes care of rounding down 
g$c <- floor(g$a) 

merge(f, g, by.x = "a", by.y = "c", all.x = TRUE, all.y = TRUE) 
#> Warning in merge.data.frame(f, g, by.x = "a", by.y = "c", all.x = TRUE, : 
#> column name 'a' is duplicated in the result 
#>  a b.x a b.y m 
#> 1 1 a 1.5 a 1 
#> 2 1 a 1.4 b 2 
#> 3 2 b 2.3 b 3 
#> 4 2 b 2.2 b 4 
#> 5 3 a NA <NA> NA 
#> 6 4 b 4.4 a 5 
#> 7 4 b 4.0 b 6 
#> 8 4 b 4.6 a 11 
#> 9 4 b 4.1 b 10 
#> 10 5 a 5.5 b 12 
#> 11 5 a 5.0 a 7 
#> 12 6 a 6.6 b 8 
#> 13 7 a NA <NA> NA 
#> 14 8 b NA <NA> NA 
#> 15 9 b 9.8 a 9 
#> 16 10 a NA <NA> NA 
関連する問題