使用 dplyr 复制列并为 R 中的新列添加前缀
Copy a column and add a prefix to new column in R with dplyr
有人知道如何复制 data.frame
中的列并为新列添加前缀吗?
我们的想法是让一个字符向量包含数据框的某些列名,并使用前缀复制这些列,以便随后执行操作。
原因是我想在这些列上使用展开函数,但据我所知展开函数不会保留原始列。我想要什么:
来自具有以下列名称的 data.frame:
column_names <- c('var1', 'var2', 'var3')
到具有以下列的数据框
column_names <- c('var1', 'var2', 'var3', 'prefix_var1','prefix_var3')
带有 'prefix' 的列包含与其原始列相同的数据。
到目前为止我尝试过的部分成功的方法:
sel_columns <- c('var1', 'var3')
data <- data.frame(var1 = c(12,3,4), var2 = c(123,5435,121), var3 = c(23,456,123))
new_data <- data %>% mutate_at(one_of(sel_columns), funs(.))
#Error in eval(substitute(expr), envir, enclos) :
# could not find function "var1"
#In addition: Warning message:
#In one_of(sel_columns) : Unknown variables: `var1`, `var3`
new_data2 <- data %>% select(one_of(sel_columns)) %>% mutate_all(funs(prefix = . * 1)) %>% c(data, .) %>% data.frame
我们可以在 base R
试试这个
cbind(data, setNames(data[sel_columns], paste0("prefix_", sel_columns)))
# var1 var2 var3 prefix_var1 prefix_var3
#1 12 123 23 12 23
#2 3 5435 456 3 456
#3 4 121 123 4 123
我们可以使用data.table
library(data.table)
setDT(data)[, paste0("prefix_", sel_columns) := mget(sel_columns)][]
# var1 var2 var3 prefix_var1 prefix_var3
#1: 12 123 23 12 23
#2: 3 5435 456 3 456
#3: 4 121 123 4 123
或 .SDcols
如果您真的想在 dplyr
中执行此操作,您需要研究使用 dplyr
动词的标准评估版本。 @joel.wilson 有正确的想法,但如果您以编程方式执行此操作并使用管道,则 SE 版本是执行此操作的正确方法。
data %>%
bind_cols(., select_(., .dots = setNames(sel_columns, sprintf("prefix_%s", sel_columns))))
有人知道如何复制 data.frame
中的列并为新列添加前缀吗?
我们的想法是让一个字符向量包含数据框的某些列名,并使用前缀复制这些列,以便随后执行操作。
原因是我想在这些列上使用展开函数,但据我所知展开函数不会保留原始列。我想要什么:
来自具有以下列名称的 data.frame:
column_names <- c('var1', 'var2', 'var3')
到具有以下列的数据框
column_names <- c('var1', 'var2', 'var3', 'prefix_var1','prefix_var3')
带有 'prefix' 的列包含与其原始列相同的数据。
到目前为止我尝试过的部分成功的方法:
sel_columns <- c('var1', 'var3')
data <- data.frame(var1 = c(12,3,4), var2 = c(123,5435,121), var3 = c(23,456,123))
new_data <- data %>% mutate_at(one_of(sel_columns), funs(.))
#Error in eval(substitute(expr), envir, enclos) :
# could not find function "var1"
#In addition: Warning message:
#In one_of(sel_columns) : Unknown variables: `var1`, `var3`
new_data2 <- data %>% select(one_of(sel_columns)) %>% mutate_all(funs(prefix = . * 1)) %>% c(data, .) %>% data.frame
我们可以在 base R
cbind(data, setNames(data[sel_columns], paste0("prefix_", sel_columns)))
# var1 var2 var3 prefix_var1 prefix_var3
#1 12 123 23 12 23
#2 3 5435 456 3 456
#3 4 121 123 4 123
我们可以使用data.table
library(data.table)
setDT(data)[, paste0("prefix_", sel_columns) := mget(sel_columns)][]
# var1 var2 var3 prefix_var1 prefix_var3
#1: 12 123 23 12 23
#2: 3 5435 456 3 456
#3: 4 121 123 4 123
或 .SDcols
如果您真的想在 dplyr
中执行此操作,您需要研究使用 dplyr
动词的标准评估版本。 @joel.wilson 有正确的想法,但如果您以编程方式执行此操作并使用管道,则 SE 版本是执行此操作的正确方法。
data %>%
bind_cols(., select_(., .dots = setNames(sel_columns, sprintf("prefix_%s", sel_columns))))