【问题标题】:Remove character string from multiple columns in R [duplicate]从R中的多列中删除字符串[重复]
【发布时间】:2019-10-03 21:33:40
【问题描述】:

我有一个包含多个时间点(波)的问卷数据的大型数据集。问卷在每一点都是相同的,因此变量以“w#variablename”的形式按时间标记(例如,“w1age”、“w2age”、“w3age”)。

我按每个时间点将较大的文件拆分为数据帧,因此我现在想从每列的列名中删除“w#”。

基本上,我想使用 R 来“查找和替换”以删除任何带有“w1”的列。

我将数据拆分如下:

w1 = Data %>% select(matches("w1"))
w2 = Data %>% select(matches("w2"))
w3 = Data %>% select(matches("w3"))
w4 = Data %>% select(matches("w4"))

现在对于这 4 个数据集,我想从列名中删除相应的“w#”。

谢谢!

【问题讨论】:

  • 我认为你可以使用rename_at而不创建多个对象Data %>% rename_at(vars(matches("^w\\d+")), ~ str_remove(., "^w\\d+"))
  • 您要重命名 w# 列,还是要完全删除它们?

标签: r loops replace multiple-columns rename


【解决方案1】:

带有tidyverse 的选项是rename_at。仅使用matchesstr_remove 指定需要更改的列名,删除后跟一个或多个数字的子字符串“w”

library(dplyr)
library(stringr)
Data %>% 
   rename_at(vars(matches("^w\\d+")), ~ str_remove(., "^w\\d+"))

注意:如果列名已经是 w1agew2age ... w100age 并且当我们删除后跟数字的“w”时,所有列都将具有相同的列名,这是不鼓励的)。因此,我们可能需要用make.unique 包装以使列名唯一

【讨论】:

  • 我认为它们是独一无二的,因为所有列都应该位于不同的 data.frames 中,并根据它们收集到的波来命名。我认为转换不应该在 Data 上执行,而是在生成的 data.frames w1w2w3 上。
【解决方案2】:

我们应该可以在这里使用sub

names(Data) <- sub("^w\\d+", "", names(Data))

正则表达式模式^w\\d+ 匹配每个列名开头的w,后跟一个或多个数字。然后我们将其替换为空字符串,从而有效地从匹配的列名中删除此前缀。

【讨论】:

  • 解决了,谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-12-14
  • 2014-08-02
  • 2019-10-24
  • 2011-12-17
  • 2021-05-30
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多