我正在寻找一种根据某些列名称将多个列粘贴
在一起的方法。我已经在堆栈上查找了如何将列粘贴和连接在一起,但尚未找到我要查找的内容。
示例数据:
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()
这些列。所以我想知道是否有一种方法可以将 name
与 name_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/