r - 将模式添加到与另一个模式匹配的列名
问题描述
我想在名为“再见”的列中添加“好”。
df <- tibble("hi" = c(1,2,3), "bye1" = c(1,2,3), "bye2" = c(1,2,3))
df
# A tibble: 3 x 3
hi bye1 bye2
<dbl> <dbl> <dbl>
1 1 1 1
2 2 2 2
3 3 3 3
在这里我可以使用:
colnames(df)[2:3] <- c("goodbye1", "goodbye2")
但我的真实情况是 df 有几百列,打字太多了。所以我想寻找模式“再见”并为所有这些添加一个“好”。我试过这个:
colnames(df[ , grepl("bye", names(df))])
[1] "bye1" "bye2"
paste0("good", colnames_bye)
[1] "goodbye1" "goodbye2"
但结合起来像
colnames(df[ , grepl("bye", names(df))]) <- paste0("good", colnames_bye)
什么都不给。没有警告,没有错误,没有变化。R 只是忽略该命令。我究竟做错了什么?
解决方案
您的代码的问题是在这种情况下
colnames(df[ , grepl("bye", names(df))])
是一个创建、更新和未签名的新对象。
而不是创建一个新对象,您应该只更新 colnames(df) 的一个子集。查看使用 ( )[ ] 代码而不是 ( [ ] ) 时的区别。
colnames(df)[grepl("bye", names(df))] <- paste0("good", colnames(df)[grepl("bye", names(df))] )
给,
hi goodbye1 goodbye2
<dbl> <dbl> <dbl>
1 1 1 1
2 2 2 2
3 3 3 3
推荐阅读
- javascript - How to accept input from user on command line in javascript?
- javascript - Cypress - Filter non zeros from table td
- excel - 如何过滤多维数据集函数中的日期范围?
- go - How to add padding, font size and colours to fyne UI app
- angular - ngx-charts-line-chart 几分钟后冻结
- javascript - 我无法运行多维数据集 js 后端服务器
- flutter - flutter statfulWidget刷新两次
- windows - 使用makefile进行Latex编译的Noob问题
- java - 从资产中打开 pdf
- javascript - 日历控制如何传递日期、开始日期和结束日期