当前位置: 首页 > 知识库问答 >
问题:

将后缀设置为前缀

慕容宏邈
2023-03-14
df <- data.frame(
  home_loc   = rnorm(5),
  work_loc   = rnorm(5),
  x1         = rnorm(5),
  walk_act   = rnorm(5),
  bike_act   = rnorm(5),
  x2         = rnorm(5),
  happy_yest = rnorm(5),
  sad_yest   = rnorm(5)
)
suff_to_pre <- function(x, suffix, prefix) {
  for (i in seq_along(names(x))) {
    if (grepl(suffix, names(x)[i])) {
      names(x)[i] <- sub(suffix, "", names(x)[i])
      names(x)[i] <- paste0(prefix, names(x)[i])
    }
  }
  names(x)
}

names(df) <- suff_to_pre(df, suffix = "_loc", prefix = "loc_")
names(df) <- suff_to_pre(df, suffix = "_act", prefix = "act_")
names(df) <- suff_to_pre(df, suffix = "_yest", prefix = "yest_")

names(df)
[1] "loc_home" "loc_work" "x1" "act_walk" "act_bike" "x2" "yest_happy"
[8] "yest_sad"
a <- df %>%
  select(ends_with("_loc")) %>%
  setNames(sub("_loc", "", names(.))) %>%
  setNames(paste0("loc_", names(.)))

b <- df %>%
  select(ends_with("_act")) %>%
  setNames(sub("_act", "", names(.))) %>%
  setNames(paste0("act_", names(.)))

c <- df %>%
  select(ends_with("_yest")) %>%
  setNames(sub("_yest", "", names(.))) %>%
  setNames(paste0("yest_", names(.)))

df <- cbind(
  select(df, x1, x2), a, b, c
)
df <- data.frame(
      home_loc   = rnorm(5),
      work_loc   = rnorm(5),
      x_1        = rnorm(5),
      walk_act   = rnorm(5),
      bike_act   = rnorm(5),
      x_2        = rnorm(5),
      happy_yest = rnorm(5),
      sad_yest   = rnorm(5),
      free_time  = rnorm(5)
)

共有1个答案

蒲寂离
2023-03-14

单个sub调用就足够了:

sub("^(.*)_(.*)$", "\\2_\\1", names(df))
#[1] "loc_home"   "loc_work"   "x1"         "act_walk"   "act_bike"   "x2"         "yest_happy" "yest_sad" 

当然,要更改名称,请将其分配回来:

names(df) <- sub("^(.*)_(.*)$", "\\2_\\1", names(df))

在dplyr-pipe中,您可以使用setnames:

df %>% setNames(sub("^(.*)_(.*)$", "\\2_\\1", names(.)))
suf <- c("act", "loc", "yest")

2)基于后缀创建正则表达式模式:

pat <- paste0("^(.*)_(", paste(suf, collapse = "|"), ")$")
pat
#[1] "^(.*)_(act|loc|yest)$"

3)照旧进行:

sub(pat, "\\2_\\1", names(df))
# [1] "loc_home"   "loc_work"   "x_1"        "act_walk"   "act_bike"   "x_2"        "yest_happy" "yest_sad"   "free_time" 

df %>% setNames(sub(pat, "\\2_\\1", names(.)))
 类似资料:
  • 我应该将以下内容转换为后缀形式: 我得到了这个答案: 这是正确的吗?如果我使用了错误的后缀形式,那么之后还有很多问题都是不正确的。如果我错了,你能告诉我为什么吗?谢谢你的帮助。

  • 我在互联网上搜索了一个很好的实现,它不是把数字表达式,而是把变量表达式从中缀符号转换成前缀和后缀。我做的所有搜索都没有成功。基本上,我想看看PHP中是否有任何实现,这样我就可以修改它以支持更多的操作符,而不仅仅是(-,*,=)。 例如转换: 同时保留变量名,不必输入数字进行计算。

  • 本文向大家介绍将中缀转换为后缀表达式,包括了将中缀转换为后缀表达式的使用技巧和注意事项,需要的朋友参考一下 前缀表达式是人类可读和可解的。我们可以轻松地区分算子的顺序,也可以在计算数学表达式时先使用括号将其求解。计算机无法轻松地区分运算符和括号,这就是为什么需要后缀转换的原因。 要将中缀表达式转换为后缀表达式,我们将使用堆栈数据结构。通过从左到右扫描infix表达式,当我们得到任何操作数时,只需将

  • 本文向大家介绍将中缀转换为前缀表达式,包括了将中缀转换为前缀表达式的使用技巧和注意事项,需要的朋友参考一下 要通过计算机求解表达式,我们可以将其转换为后缀形式或前缀形式。在这里,我们将看到中缀表达式如何转换为前缀形式。 首先,中缀表达式反转。注意,对于反转,圆括号也将反转。 例如:表达式:A + B *(C-D) 反转后的表达式为:)D – C(* B + A 因此我们需要将左括号转换为右括号,反

  • 当你编写一个算术表达式如 B*C 时,表达式的形式使你能够正确理解它。在这种情况下,你知道 B 乘以 C, 因为乘法运算符 * 出现在表达式中。这种类型的符号称为中缀,因为运算符在它处理的两个操作数之间。看另外一个中缀示例,A+B*C,运算符 + 和 * 仍然出现在操作数之间。这里面有个问题是,他们分别作用于哪个运算数上,+ 作用于 A 和 B , 还是 * 作用于 B 和 C?表达式似乎有点模糊

  • 问题内容: 像问题主题一样,如何在symfony2中设置默认表前缀? 如果可以为所有实体默认设置最佳设置,但可以选择对单个实体进行覆盖。 问题答案: 自己弄清楚了这一点之后,我想对如何实现这一点有所启发。 Symfony 2和Doctrine 2.1 注:我使用YML进行配置,这就是我要显示的内容。 打开捆绑包的 Resources / config / services.yml 定义表前缀参数: