条件重命名数据框列

时间:2017-02-07 13:37:31

标签: r string dplyr rename

我有(1)一个包含许多列(df)的数据帧,(2)一个字符向量,其元素可能是也可能不是数据帧列的名称(search_for_these), (3)包含字符串的字符,如果数据框包含指定的列(replace_with_these),则该字符应替换上述向量的每个元素。

df <- data.frame(
  dat = rep(1:2),
  bat = seq(1:2),
  cat = c("foo","bar"))

search_for_these <- c("dat", "bat", "shoe", "box")
replace_with_these <- c("cow", "bat2", "shoes", "boxes")

我的目标是将search_for_these中找到的colnames(df)的任何元素替换为replace_with_these的相同索引中找到的值。因此,期望的结果是:

df <- data.frame(
  cow = rep(1:2),
  bat2 = seq(1:2),
  cat = c("foo","bar"))

我考虑过使用dplyr::contains(),但目前还不清楚如何实现这一点。

2 个答案:

答案 0 :(得分:2)

虽然我们可以使用cellPrice.text,但我们需要确保替换在初始数据帧中匹配的元素,而不是匹配向量的索引,这些索引可能引用主数据帧中的不同变量!

正如akrun所说,我们先self.dict[cell.cellPrice.text],然后我们使用子集if let price = cell.cellPrice.text, let priceValue = self.dict[price] { self.totalLabel.text = "Total: \(priceValue)" ... } match替换包含匹配的主要向量的元素:

match

答案 1 :(得分:1)

我们可以使用match

执行此操作
i1 <- match(colnames(df), search_for_these, nomatch = 0)
colnames(df)[i1] <- replace_with_these[i1]