2017-11-26 8 views
0

から検索してtibbleの複数の列を置き換えるためにdplyrを使用した:私はこのようになりtibbles持っている別の

 B  C  D  E  F  G 
1 260-098 260-073 260-051 260-057 260-055 260-009 
2 260-098 260-073 260-051 260-057 260-055 260-009 
3 260-098 260-009 260-051 260-057 260-055 260-005 

を、私は次のことを含むデータベーステーブルを持っている:

roomID rnumber 
    1  1 260-005 
    2  2 260-009 
    3  3 260-051 
    4  4 260-055 
    5  5 260-057 
    6  6 260-073 
    7  7 260-098 

tibbleのエントリを一致するroomIDに置き換えたいと思います。私はmutate_allでそれをやることができると思った。

mutate_all(function(x){ 
     as_tibble(x) %>% 
     left_join(roomTbl, by = c("x" = "rnumber")) %>% 
     select(roomID) 
    }) 

しかし、私は結合の匿名列の名前として何を使うべきか分かりません。私は"x"names(x)と置き換えようとしましたが、Rはそれを好きではありません。

答えて

2

おそらくこのようなものでしょうか?

x = scan(what = "character") 
260-098 260-073 260-051 260-057 260-055 260-009 
260-098 260-073 260-051 260-057 260-055 260-009 
260-098 260-009 260-051 260-057 260-055 260-005 


x = matrix(x,ncol=6,byrow=TRUE) 
colnames(x) = LETTERS[2:7] 
x = data.frame(x) 

y = scan(what = "character") 
1 260-005 
2 260-009 
3 260-051 
4 260-055 
5 260-057 
6 260-073 
7 260-098 

y = matrix(y,ncol=2, byrow = TRUE) 
colnames(y) = c("roomID", "rnumber") 
y = data.frame(y) 

x = x %>% gather() %>% left_join(y, by = c("value" = "rnumber")) %>% 
    select(-value) %>% group_by(key) %>% mutate(id=1:n()) %>% 
    spread(key = key, value = roomID) 
1

あなたはdplyr::mutate_all()を使用することはできますが、各列の各行を反復処理しようとしているので、あなたは、マッチングを行うために、「ベクトル化」機能を必要としています。ここで私はmatchを使用します。

myTbl <- read.table(text = "B  C  D  E  F  G 
260-098 260-073 260-051 260-057 260-055 260-009 
260-098 260-073 260-051 260-057 260-055 260-009 
260-098 260-009 260-051 260-057 260-055 260-005", 
header = TRUE, stringsAsFactors = FALSE) 

roomTbl <- read.table(text = "roomID rnumber 
1 260-005 
2 260-009 
3 260-051 
4 260-055 
5 260-057 
6 260-073 
7 260-098", 
header = TRUE, stringsAsFactors = FALSE) 
:読ま

myTbl %>% mutate_all(funs(roomTbl$roomID[match(., roomTbl$rnumber)])) 

データ

関連する問題