R语言mutate函数用法辨析:两段代码是否等价?
关于用dplyr创建guests列的代码疑问解答
两段代码完全不一样,版本1正确,版本2逻辑错误
- 版本1的
guests = adults + children + babies是把三列数值相加,生成的guests列是三列的总和,完全符合你“合并三列”的需求 - 版本2的写法是错的:
mutate(guests = adults, children, babies)里,guests = adults只是把guests列设成和adults列完全相同,后面的children, babies纯粹多余——因为mutate默认会保留所有原列,写不写这俩都不影响结果。你觉得运行后没差异,大概率是数据里children和babies列全是0,这时候版本1的求和结果刚好等于adults列,但代码逻辑本质上是错误的
- 版本1的
为什么原列没被替换?
dplyr的mutate函数本身就是用来添加新列,同时保留所有原有列的,不会自动删除你用来计算的adults、children、babies列。如果想删掉这三列,只保留新的guests列,有两种办法:# 方法1:用transmute直接生成新列,自动丢弃原列 example_df <- bookings_df %>% transmute(guests = adults + children + babies) # 方法2:先mutate加新列,再用select删掉原列 example_df <- bookings_df %>% mutate(guests = adults + children + babies) %>% select(-adults, -children, -babies)
内容的提问来源于stack exchange,提问作者Maya
相关产品推荐
相关产品推荐

