首页 > 解决方案 > 打印以逗号分隔,删除引号并在 R 中添加特殊引号

问题描述

我有一个表,其中包含 TSV 格式的数据帧的名称,如下所示:

df1 <- t(c('18-1829.tsv', '19-0193.tsv', '14-381.tsv', '19-940.tsv'))
df1

  V1          V2          V3         V4
1 18-1829.tsv 19-0193.tsv 14-381.tsv 19-940.tsv

这些 .tsv 文件我在 R 环境中有它们。我想做的是rbind他们,关于这个功能,里面应该是这样的:

df2 <- rbind(`18-1829.tsv`, `19-0193.tsv`, `14-381.tsv`, `19-940.tsv`)

请注意,我需要特殊引号``才能使其起作用。

所以我想要做的是打印输出如下所示的文本:

dfX <- `18-1829.tsv`, `19-0193.tsv`, `14-381.tsv`, `19-940.tsv`

所以我可以简单地做rbind(dfX)并绑定它们。

到目前为止,我尝试过:

> paste(as.character(noquote(df1)), collapse="`, `")
[1] "18-1829.tsv`, `19-0193.tsv`, `14-381.tsv`, `19-940.tsv"

但这是相当错误的,因为它``在开头和结尾都没有输出,而且在[1]开头的时候会弄乱里面的东西rbind。此外,""开头和结尾的引号也可能会搞砸。

也许有更好的方法来做到这一点?

标签: rprintingpasterbind

解决方案


作为df1一个矩阵,我们可以使用mget它。无需插入特殊引号。

do.call(rbind, mget(df1))

我们也可以使用bind_rowsfromdplyr

dplyr::bind_rows(mget(df1))

或者data.table rbindlist

data.table::rbindlist(mget(df1))

使用可重现的示例

`18-1829.tsv` <- head(mtcars)
`19-0193.tsv` <- head(mtcars)
df1 <- t(c('18-1829.tsv', '19-0193.tsv'))
dplyr::bind_rows(mget(df1))

#    mpg cyl disp  hp drat    wt  qsec vs am gear carb
#1  21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
#2  21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
#3  22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
#4  21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
#5  18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
#6  18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
#7  21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
#8  21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
#9  22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
#10 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
#11 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
#12 18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

推荐阅读