r - 使用列名称为列内容添加前缀/后缀

标签 r dplyr tidy

我想改变数据框的列内容,以便单元格内容以列名作为前缀:

> x <- data.frame(VarX = rep(c("A","B"),2), VarY = rep(c("C","D"),2))
> x
  VarX VarY
1    A    C
2    B    D
3    A    C
4    B    D
> x$VarX <- paste0("VarX", x$VarX)
> x$VarY <- paste0("VarY", x$VarY)
> x
   VarX  VarY
1 VarXA VarYC
2 VarXB VarYD
3 VarXA VarYC
4 VarXB VarYD

但一般来说。我得到的最远关闭时间是:

x <- data.frame(VarX = rep(c("A","B"),2), VarY = rep(c("C","D"),2))
columns = c("VarX", "VarY")

for(col in columns)
{
  x <- x %>% mutate_at( .vars = col, ~paste0(col, .) )
}
x

但我不喜欢 for 循环。谁能改进代码?

另请注意处理 x 列选择的代码。

x <- data.frame(VarX = rep(c("A","B"),2), VarY = rep(c("C","D"),2),
  num = 1:4)

我只想修改 VarX 和 VarY 列。

最佳答案

我们可以使用imap,如果我们需要提取,它还会包含每一列的列名。在这里,我们将列名 (.y) 与列值 (.x)粘贴

library(tidyverse)
imap(x, ~ paste0(.y, .x)) %>%
    bind_cols
# A tibble: 4 x 2
#  VarX  VarY 
#   <chr> <chr>
#1 VarXA VarYC
#2 VarXB VarYD
#3 VarXA VarYC
#4 VarXB VarYD

编辑:基于@Moody_Mudskipper 的评论

imap_dfc(x, ~ paste0(.y, .x))

或者使用 base R,我们将“x”的复制列名粘贴到“x”的矩阵,并将其分配给初始数据框

x[] <- paste0(rep(colnames(x), each = nrow(x)), as.matrix(x))
x
#   VarX  VarY
#1 VarXA VarYC
#2 VarXB VarYD
#3 VarXA VarYC
#4 VarXB VarYD

关于r - 使用列名称为列内容添加前缀/后缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53763659/

相关文章:

Mac 上的 r 时区警告

sqlite - 如何从 SQLite 数据库导入?

r - 基于 'count' 变量整理数据 : create row for each individual,

python - Beautiful Soup 和 uTidy

MacOS X 上的 HTML5 格式? (最好使用 TextMate)

r - 如何从 data.frame 创建因子变量并在并排图上绘制列

r - 如何将 R 变量传递给 sqldf?

r - 方便地移动列

r - dplyr:gather 中的两个键

javascript - 整洁:避免移动脚本标签