澄清 R 中的“mutate”函数?

问题描述 投票:0回答:2

下面涉及 mutate 的两个版本的代码是否相同?

为了提供一些背景信息,练习是创建一个名为“客人”的列,该列组合了“成人、婴儿和儿童”的其他列。

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

**代码版本2: **

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

两者都正确吗?我本以为在这两种情况下,“访客”列将取代成人、儿童和婴儿列,但当我查看数据框时我可以看到所有列?

我尝试运行两个版本的代码,但没有看到任何差异

r dplyr mutate
2个回答
1
投票

dplyr::mutate()
既可以创建新变量也可以覆盖现有变量。使用所提供示例数据库的简化版本
mtcars
,如果您要求 R 解释代码:

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

mtcars2 %>%
  mutate(mpg, cyl)

您没有要求它对列 mpg

cyl
任何事情,因此它返回完全相同的数据帧(本质上什么都不做):

#                    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) children
babies
 不执行任何操作。类似地:

mtcars2 %>% mutate(guests = mpg, cyl, disp)
返回一个新列 

guests

,它等于 
mpg
,并且对 
cyl
disp
 不执行任何操作

# 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
因此,如果您的目标是将三个变量结合起来,第一个是正确的,而第二个是不正确的。


0
投票
版本不同。在第一个示例中,

guests

adults + children + babies
的总和,在第二个示例中,
guests
只是
adults

我认为你正在寻找论点

.keep = "none"

。在不同的 mutate 示例中使用它,它可能会帮助您理解它。另外,请查看 
?mutate
 了解有关该函数和 
.keep
 参数的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.