r - 根据其他列名称粘贴多个列 - R

标签 r

我正在寻找一种根据某些列名称将多个列粘贴在一起的方法。我已经在堆栈上查找了如何将列粘贴和连接在一起,但尚未找到我要查找的内容。

示例数据:

data <- data.frame(col1= c(10,20),
                   col2= c(4,8),
                   col1_pct= c(0.20, 0.30),
                   col2_pct= c(0.40, 0.87))

Output :

  col1 col2 col1_pct col2_pct
1   10    4      0.2     0.40
2   20    8      0.3     0.87

我想要的输出:

 col1_new col2_new
1   10 (0.2)   4 (0.40)
2   20 (0.3)   8 (0.87)

真实数据包含很多列,因此我不能简单地手动paste()这些列。所以我想知道是否有一种方法可以将 namename_pct 匹配的所有列粘贴在一起,就像在输出中一样。

我已经尝试了一些 lapply() 和一些 loop 但没有成功。我知道我必须以某种方式使用字符串 _pct 以及可能的 names 函数,但我不确定如何继续执行此操作。有人可以帮我吗?

谢谢。

编辑:列名称未知,因为它们是函数的一部分。

最佳答案

一个选项是通过循环交替列来使用 sprintf

data.frame(setNames(lapply(list(c(1,3), c(2, 4)), function(i) 
     do.call(sprintf, c(fmt = "%d (%0.2f)",
        data[i]))), paste0(names(data)[1:2], "_new")))
#   col1_new col2_new
#1 10 (0.20) 4 (0.40)
#2 20 (0.30) 8 (0.87)

它也可以转换为 tidyverse

library(tidyverse0
map2_df(data %>% 
           select(1:2), 
        data %>% 
           select(matches("pct")), ~  sprintf("%d (%0.2f)", .x, .y)) %>%
   rename_all(~ str_c(., "_new"))
# A tibble: 2 x 2
# col1_new  col2_new
#  <chr>     <chr>   
#1 10 (0.20) 4 (0.40)
#2 20 (0.30) 8 (0.87)

关于r - 根据其他列名称粘贴多个列 - R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57185094/

相关文章:

r - 与前一行的行值重叠

r - R 中的异常处理

r - 为 R 中文件夹中的所有文件添加文件扩展名

R - 确定变量是否是字符串

python - 删除所有观测值具有相同值的列是否会影响我的模型?

删除 R 输出中的反引号

r - 将第一行转换为数据帧列表中的列名称,然后删除第一行

r - R 中的 C5.0 机器学习,测试数据准确率 100%

r - r中的模糊字符串匹配

r - 是否可以从 vcd 包中编辑马赛克图的轴标签?