gpt4 book ai didi

r - dplyr 不接受 paste0() 作为 rename() 中的 old_name

转载 作者:行者123 更新时间:2023-12-05 03:39:30 25 4
gpt4 key购买 nike

我正在尝试构建一个函数来导入一堆 csv 文件并清理它们。其中一个清理功能涉及使用 dplyr rename() 从 csv 文件名中提取年份并将其粘贴到列名。由于某种原因,它不会工作。我正在尝试找出原因。

这是一个简单的例子:

df <- data.frame('value' = 1:5)
df
value
1 1
2 2
3 3
4 4
5 5

但是,当我尝试重命名时:

rename(df, paste0('value', '_', gsub('([a-z]+_)|(\\.csv)', '', 'csv_2018.csv')) = 'value')

抛出:

Error: unexpected '=' in "rename(df, paste0('value', '_', gsub('([a-z]+_)|(\\.csv)', '', 'csv_2018.csv')) ="

值得注意的是,这很好用:

paste0('value', '_', gsub('([a-z]+_)|(\\.csv)', '', 'csv_2018.csv'))
[1] "value_2018"

这也很好用:

rename(df, 'value_2018' = 'value')
value_2018
1 1
2 2
3 3
4 4
5 5

问题似乎出在 paste0() (而不是 gsub() ),因为这也不起作用:

rename(df, paste0('value', '_') = 'value')

抛出同样的错误:

Error: unexpected '=' in "rename(df, paste0('value', '_') ="

显然:paste0('value', '_') 可以给出:"value_"

我可以用其他方式解决这个问题,但想知道为什么 dplyr 不接受 paste0 作为 new_name 的输入。

最佳答案

= 的 lhs 上的表达式将不起作用。而是使用 :=!!

library(dplyr)
rename(df, !! paste0('value', '_', gsub('([a-z]+_)|(\\.csv)', '',
'csv_2018.csv')) := 'value')
value_2018
1 1
2 2
3 3
4 4
5 5

或者另一种选择是rename_with

rename_with(df, ~ paste0('value', '_', gsub('([a-z]+_)|(\\.csv)', '',
'csv_2018.csv')), 'value')
value_2018
1 1
2 2
3 3
4 4
5 5

关于r - dplyr 不接受 paste0() 作为 rename() 中的 old_name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68568489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com