在R中连接N列文本

9

我有一些包含文本数据的任意列,这些列是使用cbind()命令组装的,例如:

[1,] "Text 1,1" "Text 1,2" "Text 1,n"
[2,] "Text 2,1" "Text 2,2" "Text 2,n"
[3,] "Text 3,1" "Text 3,2" "Text 3,n"
[n,] "Text n,1" "Text n,2" "Text n,n"

我想将每行连接在一起,得到:

[1,] "Text 1,1 Text 1,2 Text 1,n"
[n,] "Text n,1 Text n,2 Text n,n"

目前,我使用一个for循环来完成这个过程(其中textColumns是cbind()矩阵):

concatColumn <- c()
for (i in 1:ncol(textColumns)) concatColumn <- paste(concatColumn,textColumns[,i])

在R中是否有更简单、更优雅的方法来完成这个任务?我一直在寻找使用paste()命令而不需要for循环的方法,但是一直没有找到解决方案。非常感谢您的帮助!

2个回答

24

使用data.frame很容易实现此目的,

m = matrix(letters[1:12], 3, byrow=TRUE)
do.call(paste, as.data.frame(m, stringsAsFactors=FALSE))
#[1] "a b c d" "e f g h" "i j k l"

5
另外,可以使用 apply(m, 1, paste, collapse=" ") 直接处理矩阵。 - baptiste
这正是我在寻找的。apply()方法运行得非常好。谢谢!将其转换为data.frame方法给了我一些奇怪的输出:[1] "c(\"t1\", \"t2\", \"t3\")" "c(\"t4\", \"t5\", \"t6\")" "c(\"t7\", \"t8\", \"t9\")" - Timothy P. Jurka

8

只需使用带有其collapse参数的paste

R> row <- c("Text 1,1",  "Text 1,2", "Text 1,n")
R> paste(row, collapse=" ")
[1] "Text 1,1 Text 1,2 Text 1,n"
R> 
paste是矢量化的,因此您可以同时输入多个参数。

嗨Dirk,感谢您的回复。但是,在处理多个列时,该方法将它们全部连接成一个字符向量。例如,cols <- cbind(c("1","2","3"),c("4","5","6"),c("7","8","9")) 会产生一个字符向量 [1] "1" "2" "3" "4" "5" "6" "7" "8" "9",而我需要三行,如 [1] "1 4 7" [2] "2 5 8" 等。 - Timothy P. Jurka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接