使用 dplyr 复制一列并为 R 中的新列添加前缀

     2023-02-22     222

关键词:

【中文标题】使用 dplyr 复制一列并为 R 中的新列添加前缀【英文标题】:Copy a column and add a prefix to new column in R with dplyr 【发布时间】:2016-12-02 10:12:53 【问题描述】:

有人知道如何复制data.frame 中的列并为新列添加前缀吗?

我们的想法是拥有一个包含数据帧的某些列名的字符向量,并使用前缀复制这些列名,以便随后执行操作。

原因是我想在这些列上使用扩展函数,但据我所知,扩展函数不会保留原始列。我想要什么:

来自具有以下列名称的 data.frame:

column_names <- c('var1', 'var2', 'var3')

到具有以下列的数据框

column_names <- c('var1', 'var2', 'var3', 'prefix_var1','prefix_var3')

带有“前缀”的列包含与其原始列相同的数据。

到目前为止我已经尝试过,其中部分成功了:

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

【问题讨论】:

【参考方案1】:

我们可以在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.frame,一个名为“data”,另一个名为“V2” '。我发现使用 c() 函数 cbind() 函数确实可以正常工作。 @Michael 我不确定可能是什么问题。可以发dput(head(data)) 让我们得到真正的数据集吗? 如果您确实想添加 dplyr 风格:bind_cols(data, setNames(data[sel_columns], paste0("prefix_",sel_columns)))【参考方案2】:

我们可以使用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

【讨论】:

【参考方案3】:

如果您真的想在dplyr 中执行此操作,您需要考虑使用dplyr 动词的标准评估版本。 @joel.wilson 有正确的想法,但如果您以编程方式执行此操作并使用管道,则 SE 版本是执行此操作的正确方法。

data %>% 
  bind_cols(., select_(., .dots = setNames(sel_columns, sprintf("prefix_%s", sel_columns)))) 

【讨论】:

使用 group by 汇总列并存储为 MySQL 中的新列(永久)

】使用groupby汇总列并存储为MySQL中的新列(永久)【英文标题】:Sumupcolumnsusinggroupbyandstoreasanewcolumn(permanently)inMySQL【发布时间】:2020-05-1815:46:53【问题描述】:我的MySQL表中有50列。我想对所有这些列求和,并在同一个表中创建... 查看详情

dplyr 中的 mutate_each / summarise_each:如何选择某些列并为变异列赋予新名称?

...01-1714:11:18【问题描述】:我对dplyr动词mutate_each.有点困惑使用基本的mutate 查看详情

Android - 数据库中的新列并从备份中恢复数据库

...布时间】:2021-12-1920:20:57【问题描述】:在Android中,我使用的是SQLite数据库,并且有一个包含ID、名称、年龄的结构。用户可以将数据库备份到GoogleDrive。到目前为止一切正常。问题是,我正在开发我的应用程序的新版本,并且... 查看详情

R中的dplyr mutate - 添加列作为列的连接

...ofcolumns【发布时间】:2014-03-1205:22:55【问题描述】:我在使用mutatedplyr函数以向数据框添加新列时遇到问题。我希望一个新列是字符类型,并且包含来自其他列的排序单词的“concat”(也是字符类型)。例如,对于以下数据框:&... 查看详情

如何使用 Scala/Spark 添加不基于数据框中现有列的新列? [复制]

】如何使用Scala/Spark添加不基于数据框中现有列的新列?[复制]【英文标题】:HowtoaddnewcolumnnotbasedonexistcolumnindataframewithScala/Spark?[duplicate]【发布时间】:2017-07-2103:05:21【问题描述】:我有一个DataFrame,我想添加一个新的column,但... 查看详情

如何删除一列并创建一个新列而不是在 EF Core 中重命名?

】如何删除一列并创建一个新列而不是在EFCore中重命名?【英文标题】:HowdoIdropacolumnandcreateanewoneinsteadofrenaminginEFCore?【发布时间】:2021-12-0201:25:36【问题描述】:尝试在我的一个模型中删除两列并添加新列(已删除和新列之间... 查看详情

如何根据使用 dplyr 的组上的聚合函数计算新列(在汇总统计信息上添加汇总统计信息)?

】如何根据使用dplyr的组上的聚合函数计算新列(在汇总统计信息上添加汇总统计信息)?【英文标题】:Howtocalculatenewcolumndependingonaggregatefunctionongroupusingdplyr(addsummarystatisticsonthesummarystatistics)?【发布时间】:2017-07-0123:51:19【问... 查看详情

迭代数据框并根据一列的值在具有前一行值的新列中执行操作

】迭代数据框并根据一列的值在具有前一行值的新列中执行操作【英文标题】:iterrateoverdataframeandbasedonthevalueofonecolumndooperationsinanewcolumnwithpreviousrow\'svalue【发布时间】:2021-11-2318:01:10【问题描述】:我对他们的行为有少量的股... 查看详情

使用 ifelse 添加具有条件值的新列

】使用ifelse添加具有条件值的新列【英文标题】:Addingnewcolumnwithconditionalvaluesusingifelse【发布时间】:2016-09-1604:53:30【问题描述】:我有一个包含超过400.000个观察值的数据框,我正在尝试向其中添加一列,其值取决于另一列,有... 查看详情

如何添加新列作为第一列? [复制]

】如何添加新列作为第一列?[复制]【英文标题】:Howtoaddanewcolumnasafirstone?[duplicate]【发布时间】:2015-12-1200:09:32【问题描述】:我编写了以下代码来向pandasDataFrame添加一个新列:validnew=validation[features]validnew[\'const\']=pd.Series([0forx... 查看详情

使用 Serilog 将数据添加到 SQL Server 中的新列

】使用Serilog将数据添加到SQLServer中的新列【英文标题】:AdddatatonewcolumnsinSQLServerwithSerilog【发布时间】:2021-12-0712:34:44【问题描述】:我在SQLServer中使用SerlLog,配置后我在SQLServer中有下表:我想将数据添加到MessageLikeExpression列... 查看详情

合并两列并添加到一个新列中

...间】:2012-08-3122:00:36【问题描述】:在PostgreSQL中,我想使用SQL语句来组合两列并从中创建一个新列。我正在考虑使用concat(...),但有更好的方法吗?最好的方法是什么?【问题讨论】:【参考方案1】:总的来说,我同意@kgrittn\'s... 查看详情

使用 docrine 模式在 symfony 中的另一列之后添加新列

】使用docrine模式在symfony中的另一列之后添加新列【英文标题】:addnewcolumnafteranothercolumninsymfonyusingdocrineschema【发布时间】:2020-08-2412:48:09【问题描述】:代码房间桌子的实体。useDoctrine\\ORM\\MappingasORM;classRoom/***@ORM\\Id()*@ORM\\Genera... 查看详情

改变一列并在R中函数的输入变量之后命名它

】改变一列并在R中函数的输入变量之后命名它【英文标题】:MutateacolumnandnameitaftertheinputvariableforafunctioninR【发布时间】:2020-03-3121:41:10【问题描述】:我在R中有一个89列宽和500,000行长的数据框。在每一列中都有多个4位数字代... 查看详情

dplyr 创建一个具有其他列的复杂用户定义函数的新列

】dplyr创建一个具有其他列的复杂用户定义函数的新列【英文标题】:dplyrcreateanewcolumnwithacomplexuserdefinedfunctionofothercolumns【发布时间】:2021-02-2809:37:57【问题描述】:我有一个大型数据框,其中包含40个问题的回答(代表以下3个... 查看详情

如何清除SQL中的自增列并插入一组从1开始的新数字? [复制]

...将该数据插入到SQL表中。为了获得更好的上下文,我目前使用此处描述的方法- 查看详情

如何清除SQL中的自增列并插入一组从1开始的新数字? [复制]

...将该数据插入到SQL表中。为了获得更好的上下文,我目前使用此处描述的方法- 查看详情

使用索引来引用 dplyr 中的 summarise() 中的列 - R

】使用索引来引用dplyr中的summarise()中的列-R【英文标题】:Usingindextoreferencecolumninsummarise()indplyr-R【发布时间】:2017-03-2111:01:39【问题描述】:我想用它的索引而不是它的名称来引用dplyr中summarise()内的一列。例如:>aidvisittimepoi... 查看详情