解释R中的“mutate”功能?

mrphzbgm  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(133)

下面涉及mutate的代码的两个版本是相同的吗?
为了给予一点上下文,练习是创建一个名为“客人”的列,该列将其他列“成人、婴儿和儿童”组合在一起。

example_df <- bookings_df %>%
  mutate(guests = adults + children + babies)

代码版本2:

example_df <- bookings_df %>%
  mutate(guests = adults, children, babies)

两者都正确吗?我本以为在这两种情况下,“客人”列将取代成人,儿童和婴儿列,但我可以看到所有列,当我查看数据框?
我试着运行两个版本的代码,但没有看到任何差异

zbwhf8kr

zbwhf8kr1#

这真的应该是一个评论,但我想花更多的空间,并解释在这里发生了什么,在一个非技术性的方式,因为很明显,有一些混乱。
dplyr::mutate()既可以创建新变量,也可以覆盖现有变量。使用提供的示例数据库mtcars的缩短版本,如果您要求R解释代码:

mtcars2 <- mtcars[1:5, c("mpg", "cyl", "disp")]

mtcars2 %>%
  mutate(mpg, cyl)

你没有要求它对列mpgcyl做任何事情,所以它返回完全相同的 Dataframe (基本上什么都不做):

#                    mpg cyl disp
# Mazda RX4         21.0   6  160
# Mazda RX4 Wag     21.0   6  160
# Datsun 710        22.8   4  108
# Hornet 4 Drive    21.4   6  258
# Hornet Sportabout 18.7   8  360

如果你要求R解释下面的命令:

mtcars2 %>%
  mutate(mpg = mpg ^ 2, cyl)

你要求R(1)用mpg的平方值覆盖mpg列,(2)不对cyl做任何事情-所以它分别返回这些列的平方值和相同的值。

#                      mpg cyl disp
# Mazda RX4         441.00   6  160
# Mazda RX4 Wag     441.00   6  160
# Datsun 710        519.84   4  108
# Hornet 4 Drive    457.96   6  258
# Hornet Sportabout 349.69   8  360

在第一段代码中,通过对三个变量求和来创建一个新列guests。类似地:

mtcars2 %>%
  mutate(guests = mpg + cyl + disp)

这将创建一个新列guests(不会覆盖),并返回三列的总和:

#                    mpg cyl disp guests
# Mazda RX4         21.0   6  160  187.0
# Mazda RX4 Wag     21.0   6  160  187.0
# Datsun 710        22.8   4  108  134.8
# Hornet 4 Drive    21.4   6  258  285.4
# Hornet Sportabout 18.7   8  360  386.7

您提供的第二个代码(1)要求R创建一个新列guests,它等于值adults,然后(2)对childrenbabies * 什么都不做 *。类似地:

mtcars2 %>%
  mutate(guests = mpg, cyl, disp)

返回一个新列guests,它等于mpg,并且不对cyldisp执行任何操作

#                    mpg cyl disp guests
# Mazda RX4         21.0   6  160   21.0
# Mazda RX4 Wag     21.0   6  160   21.0
# Datsun 710        22.8   4  108   22.8
# Hornet 4 Drive    21.4   6  258   21.4
# Hornet Sportabout 18.7   8  360   18.7

所以如果你的目标是将这三个变量合并,第一个是正确的,第二个是不正确的。
希望这提供了一些清晰度,希望你喜欢学习R和快乐的编码!

xytpbqjk

xytpbqjk2#

版本不同。在第一个例子中,guestsadults + children + babies的和,而在第二个例子中,guests只是adults
我想你正在寻找参数.keep = "none"。在不同的mutate例子中使用它,它可能会帮助你理解它。另外,请查看?mutate以了解有关函数和.keep参数的更多信息。

相关问题