我的数据有几列,其中包含字符串“ trait”。我想使用dplyr以相同的方式更改这些列。
我的第一个直觉是按以下方式使用mutate_if
:
my_data %>% mutate_if(contains('trait'), funs(if_else(.=='True',T,F)) )
但是我得到了错误
Error: Variable context not set
该错误是什么意思?如何正确使用
mutate_if
功能?这是我的数据示例(省略了其他一些列)。
tibble::tribble(
~X1_on_1_rush_trait, ~acrobatic_clearance_trait, ~argues_with_officials_trait, ~avoids_using_weaker_foot_trait, ~backs_into_player_trait, ~bicycle_kicks_trait, ~cautious_with_crosses_trait, ~chip_shot_trait, ~chipped_penalty_trait, ~comes_for_crosses_trait, ~corner_specialist_trait, ~diver_trait, ~dives_into_tackles_trait, ~diving_header_trait, ~driven_pass_trait, ~early_crosser_trait, ~fan.s_favourite_trait, ~fancy_flicks_trait, ~finesse_shot_trait, ~flair_trait, ~flair_passes_trait, ~gk_flat_kick_trait, ~gk_long_throw_trait, ~gk_up_for_corners_trait, ~giant_throw_in_trait, ~inflexible_trait, ~injury_free_trait, ~injury_prone_trait, ~leadership_trait, ~long_passer_trait, ~long_shot_taker_trait, ~long_throw_in_trait, ~one_club_player_trait, ~outside_foot_shot_trait, ~playmaker_trait, ~power_free_kick_trait, ~power_header_trait, ~puncher_trait, ~rushes_out_of_goal_trait, ~saves_with_feet_trait, ~second_wind_trait, ~selfish_trait, ~skilled_dribbling_trait, ~stutter_penalty_trait, ~swerve_pass_trait, ~takes_finesse_free_kicks_trait, ~target_forward_trait, ~team_player_trait, ~technical_dribbler_trait, ~tries_to_beat_defensive_line_trait, ~name,
"False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "True", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "True", "False", "False", "False", "False", "True", "False", "False", "False", "False", "False", "False", "True", "False", "False", "False", "False", "False", "False", "False", "Cristiano Ronaldo",
"False", "False", "False", "False", "False", "False", "False", "True", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "True", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "True", "False", "True", "False", "True", "False", "False", "False", "False", "False", "False", "False", "True", "False", "False", "False", "False", "False", "False", "False", "L. Messi",
"False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "True", "False", "False", "False", "False", "False", "False", "False", "True", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "True", "False", "False", "True", "False", "False", "True", "False", "Neymar",
"False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "True", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "True", "True", "L. Suárez",
"True", "False", "False", "False", "False", "False", "False", "False", "False", "True", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "True", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "True", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "M. Neuer",
"False", "False", "False", "False", "False", "False", "False", "True", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "True", "False", "False", "False", "False", "False", "False", "False", "True", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "False", "R. Lewandowski"
)
最佳答案
您应该将contains(“ trait”)变量过滤器包装到vars()调用中
my_data %>%
mutate_at(vars(contains('trait')), funs(.=='True'))
附言我建议您也放弃
if_else()
呼叫,直接使用逻辑比较关于r - 如果列名称包含字符串,则将变量更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48478905/