我想使用dplyr dplyr::mutate()在数据框中创建多个新列.应动态生成列名称及其内容.
来自虹膜的示例数据:
library(dplyr)
iris <- tbl_df(iris)
Run Code Online (Sandbox Code Playgroud)
我已经创建了一个函数来改变Petal.Width变量中的新列:
multipetal <- function(df, n) {
varname <- paste("petal", n , sep=".")
df <- mutate(df, varname = Petal.Width * n) ## problem arises here
df
}
Run Code Online (Sandbox Code Playgroud)
现在我创建一个循环来构建我的列:
for(i in 2:5) {
iris <- multipetal(df=iris, n=i)
}
Run Code Online (Sandbox Code Playgroud)
但是,由于mutate认为varname是一个文字变量名,因此循环只创建一个新变量(称为varname)而不是四个(称为petal.2 - petal.5).
如何将mutate()动态名称用作变量名?
我正在尝试使用mutate基于特定列的值创建一个新列。
示例最终数据框(我正在尝试创建new_col):
x = tibble(colA = c(11, 12, 13),
colB = c(91, 92, 93),
col_to_use = c("colA", "colA", "colB"),
new_col = c(11, 12, 93))
Run Code Online (Sandbox Code Playgroud)
我想做类似的事情:
x %>% mutate(new_col = col_to_use)
Run Code Online (Sandbox Code Playgroud)
除了列内容之外,我想将它们转换为变量。我开始于:
col_name = "colA"
x %>% mutate(new_col = !!as.name(col_name))
Run Code Online (Sandbox Code Playgroud)
这适用于静态变量。但是,我一直无法更改变量来表示列。如何根据不同列的内容获取列名?
这个问题基本上与此相反:dplyr - mutate: use dynamic variable names。我无法根据我的问题调整解决方案。
我正在尝试将dplyr\count()与动态变量名称而不是列名称一起使用。以前,我会使用count_(),但现在已弃用。最好的替代品是什么?
最小可重现示例:
\n\nlibrary(dplyr)\ndf <- data.frame(id = 1:10, city = sample(c("London","Paris","Amsterdam"), 10, replace=TRUE))\ncolname <- "city"\nRun Code Online (Sandbox Code Playgroud)\n\n这是我尝试过的:
\n\ndf %>% count( city ) # desired output (works but isn\'t dynamic)\ndf %>% count( !!colname ) # doesn\'t work, makes it literally "city"\ndf %>% count( vars(colname) ) # doesn\'t work\ndf %>% count( eval(colname) ) #\xc2\xa0doesn\'t work either\ndf %>% count( eval(parse(text=colname)) ) # works, but is not \'dplyr\' ?\ndf %>% count( eval(sym(colname)) ) # works, but …Run Code Online (Sandbox Code Playgroud)