英文:
How to use dplyr verbs rename and mutate in a same chunk
问题
我想首先将我的 x
变量重命名为 newX
,然后基于 newX
和 y
的值来创建一个新列名为 z
。将重命名和变异放在同一个块中会导致错误。
有没有一种方法可以在不出错的情况下使用选项1?
set.seed(1)
dat <- data.frame(
x = sample(c(0,1), size = 5, replace = TRUE),
y = sample(c(0,1), size = 5, replace = TRUE)
)
# 选项1
dat %>%
rename(newX = x) %>%
mutate(z = rowSums(dat[c("newX", "y")] == 1))
# 选项2
dat <- dat %>%
rename(newX = x)
dat %>%
mutate(z = rowSums(dat[c("newX", "y")] == 1))
请注意,我只翻译了您提供的代码部分,没有其他内容。
英文:
I want to first rename my x
variable to newX
and then mutate a new column name z
based on values of newX
and y
. Putting rename and mutate in same chunk result in an error.
Is there a way to use option 1 without an error?
set.seed(1)
dat <- data.frame(
x = sample(c(0,1), size = 5, replace = TRUE),
y = sample(c(0,1), size = 5, replace = TRUE)
)
# option 1
dat %>%
rename(newX = x) %>%
mutate(z = rowSums(dat[c("newX", "y")] == 1))
# option 2
dat <- dat %>%
rename(newX = x)
dat %>%
mutate(z = rowSums(dat[c("newX", "y")] == 1))
答案1
得分: 2
使用 dplyr::pick()
,它允许您从当前数据框环境中“挑选”变量,而不是 dat[c("vars")]
,它在任何转换之前引用了 dat
对象。
library(dplyr)
dat %>%
rename(newX = x) %>%
mutate(z = rowSums(pick(newX, y) == 1))
newX y z
1 0 0 0
2 1 0 1
3 0 0 0
4 0 1 1
5 1 1 2
英文:
Use dplyr::pick()
, which lets you “pick” variables from the current dataframe environment, rather than dat[c("vars")]
, which references the dat
object before any transformations.
library(dplyr)
dat %>%
rename(newX = x) %>%
mutate(z = rowSums(pick(newX, y) == 1))
newX y z
1 0 0 0
2 1 0 1
3 0 0 0
4 0 1 1
5 1 1 2
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论