我想在转换后重命名dplyr
链中的某些列。但是,我不知道如何在rename.vars
函数中调用当前结构的名称。调用dplyr链中的data.frame
我有这样的data.frame:
library(gdata)
library(dplyr)
library(reshape2)
dat <- structure(list(user = c(1101L, 1102L, 1103L, 1104L, 1105L, 1101L,
1102L, 1103L, 1104L, 1105L, 1101L, 1102L, 1103L, 1104L, 1105L,
1101L, 1102L, 1103L, 1104L, 1105L), campaign = structure(c(1L,
2L, 1L, 2L, 3L, 3L, 4L, 5L, 2L, 1L, 1L, 3L, 3L, 2L, 3L, 2L, 1L,
4L, 3L, 2L), .Label = c("A", "B", "C", "D", "E"), class = "factor"),
impression_number = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L)), .Names = c("user",
"campaign", "impression_number"), class = "data.frame", row.names = c(NA,
-20L))
,看起来像这样:
user campaign impression_number
1 1101 A 1
2 1102 B 1
3 1103 A 1
4 1104 B 1
5 1105 C 1
6 1101 C 2
当我试图运行下面的命令,它错误,因为我不是引用的名字当前对象:
dat %>%
dcast(user ~ impression_number, value.var = 'campaign') %>%
rename.vars(names(.)[2:5], paste0('impression_', names(.)[2:5]))
理想的情况下,我想该数据帧:
user impression_1 impression_2 impression_3 impression_4
1 1101 A C A B
2 1102 B D C A
3 1103 A E C D
4 1104 B B B C
5 1105 C A C B
我该怎么办才能引用当前对象的名称?我也从文档中尝试了lhs
,但这只是一个占位符,并且也不起作用。
在此先感谢!
也许只是先用'mutate'改变'impression_number'?像mutate(impression_number = paste(“impression”,impression_number,sep =“_”))',然后链接到投射。 – aosmith 2014-09-18 21:24:06
这绝对有效,但我正在寻找一种通用的方式来调用链中的现有对象。在不同的情况下,我遇到过这个问题,但最终意识到这是一个简单的例子,最终在这里展示。谢谢! – maloneypatr 2014-09-18 21:27:27
当我尝试过滤出不完整的行时,我想调用该结构的另一个示例。通常,我使用'dat [complete.cases(dat),]',但我不能在'dplyr'链中使用它。 – maloneypatr 2014-09-19 13:59:05