下面涉及mutate的代码的两个版本是相同的吗?
为了给予一点上下文,练习是创建一个名为“客人”的列,该列将其他列“成人、婴儿和儿童”组合在一起。
example_df <- bookings_df %>%
mutate(guests = adults + children + babies)
代码版本2:
example_df <- bookings_df %>%
mutate(guests = adults, children, babies)
两者都正确吗?我本以为在这两种情况下,“客人”列将取代成人,儿童和婴儿列,但我可以看到所有列,当我查看数据框?
我试着运行两个版本的代码,但没有看到任何差异
2条答案
按热度按时间zbwhf8kr1#
这真的应该是一个评论,但我想花更多的空间,并解释在这里发生了什么,在一个非技术性的方式,因为很明显,有一些混乱。
dplyr::mutate()
既可以创建新变量,也可以覆盖现有变量。使用提供的示例数据库mtcars
的缩短版本,如果您要求R解释代码:你没有要求它对列
mpg
和cyl
做任何事情,所以它返回完全相同的 Dataframe (基本上什么都不做):如果你要求R解释下面的命令:
你要求R(1)用
mpg
的平方值覆盖mpg
列,(2)不对cyl
做任何事情-所以它分别返回这些列的平方值和相同的值。在第一段代码中,通过对三个变量求和来创建一个新列
guests
。类似地:这将创建一个新列
guests
(不会覆盖),并返回三列的总和:您提供的第二个代码(1)要求R创建一个新列
guests
,它等于值adults
,然后(2)对children
和babies
* 什么都不做 *。类似地:返回一个新列
guests
,它等于mpg
,并且不对cyl
或disp
执行任何操作所以如果你的目标是将这三个变量合并,第一个是正确的,第二个是不正确的。
希望这提供了一些清晰度,希望你喜欢学习R和快乐的编码!
xytpbqjk2#
版本不同。在第一个例子中,
guests
是adults + children + babies
的和,而在第二个例子中,guests
只是adults
。我想你正在寻找参数
.keep = "none"
。在不同的mutate例子中使用它,它可能会帮助你理解它。另外,请查看?mutate
以了解有关函数和.keep
参数的更多信息。