2017-10-24 8 views
1

私は下位評価でvariable_unmodifiedvariableの値を持つことができるように、私のtibbleに変数のセットをコピーしたいと思います。古いスタイルのアンダースコアNSE select_()の機能と.dotsを使用したハックのあるバージョンを用意しましたが、新しいNSEアプローチで整然とした評価のセマンティクスを使用したいと考えています。複数の列を選択し、複製し、名前を変更する方法は、きちんとした評価のセマンティクスを使用していますか?

これは私が欲しいものを行います。

tibble_to_max <- tibble(
    "a_col" = c("1", "2", "3", "4"), 
    "max_1" = c("3;4", "2{3}4", "7", ".{1}"), 
    "max_2" = c("3;4", "2{3}4", "7", ".{1}") 
) 

cols_to_max <- c("max_1", "max_2") 

unparsed_names <- paste0(cols_to_max, "_unparsed") 

tibble_to_max %>% 
    bind_cols(select_(., .dots = setNames(cols_to_max, unparsed_names))) 

は出力:

# A tibble: 4 x 5 
    a_col max_1 max_2 max_1_unparsed max_2_unparsed 
    <chr> <chr> <chr>   <chr>   <chr> 
1  1 3;4 3;4   3;4   3;4 
2  2 2{3}4 2{3}4   2{3}4   2{3}4 
3  3  7  7    7    7 
4  4 .{1} .{1}   .{1}   .{1} 

しかし、私はselect()!!でそれを行うにしようと、私は予想通り、.dotsは動作しません:

tibble_to_max %>% 
    bind_cols(select(., .dots = setNames(!!cols_to_max, !!unparsed_names))) 

列の名前は希望通りにしません:

# A tibble: 4 x 5 
    a_col max_1 max_2 .dots1 .dots2 
    <chr> <chr> <chr> <chr> <chr> 
1  1 3;4 3;4 3;4 3;4 
2  2 2{3}4 2{3}4 2{3}4 2{3}4 
3  3  7  7  7  7 
4  4 .{1} .{1} .{1} .{1} 

これを実行するための正しい方法は何ですか?また、別の変数としてunparsed_namesを定義回避するため、ボーナスポイント...

答えて

0

おかげで列の名前を変更するrename_allを使用しています。これは、私が撮影したものを達成し、代わりにselect_()のきちんと評価のセマンティクスを使用しています:

私が望むように、出力tibbleの値を取得しますが、それらの名前を変更しない
tibble_to_max <- tibble(
    "a_col" = c("1", "2", "3", "4"), 
    "max_1" = c("3;4", "2{3}4", "7", ".{1}"), 
    "max_2" = c("3;4", "2{3}4", "7", ".{1}") 
) 

cols_to_max <- c("max_1", "max_2") 

tibble_to_max %>% 
    bind_cols(
    select_at(., 
     .vars = !!cols_to_max, 
     .funs = funs(paste0(., "_unparsed")) 
    ) 
    ) 
1

たぶん何か

このようなあなたのデータ

nestを使用して
tibble_to_max <- tibble(
    "a_col" = c("1", "2", "3", "4"), 
    "max_1" = c("3;4", "2{3}4", "7", ".{1}"), 
    "max_2" = c("3;4", "2{3}4", "7", ".{1}") 
) 

ソリューション、そしてその後、一度にすべてのネストされたデータをコピーしますunnest。私は正しい道に私を取得するための@CPakへdata_copy

library(tidyverse) 
tibble_to_max %>% 
    nest(-a_col) %>% 
    mutate(data_copy = data) %>% 
    mutate(data_copy = map(data_copy, ~.x %>% rename_all(funs(paste0(., "_unparsed"))))) %>% 
    unnest(data, data_copy) 

出力

# A tibble: 4 x 5 
    a_col max_1 max_2 max_1_unparsed max_2_unparsed 
    <chr> <chr> <chr>   <chr>   <chr> 
1  1 3;4 3;4   3;4   3;4 
2  2 2{3}4 2{3}4   2{3}4   2{3}4 
3  3  7  7    7    7 
4  4 .{1} .{1}   .{1}   .{1} 
+0

。これを行うのと同じだと思います: 'tibble_to_max%>%bind_cols(select(。、!! cols_to_max))' – bheavner

+1

これはやっているのかどうかは分かりませんが、動作します... – CPak

関連する問題