Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 字符矩阵-如何按行操作?_R_Matrix_Text Mining - Fatal编程技术网

R 字符矩阵-如何按行操作?

R 字符矩阵-如何按行操作?,r,matrix,text-mining,R,Matrix,Text Mining,我有一个字符数据矩阵 charMatrix <- structure(c("Bolt", "Nut Plate", "Magnet", "", "Clevis", "welded", "", "Receptacle"), .Dim = c(4L, 2L)) [,1] [,2] [1,] "Bolt" "Clevis" [2,] "Nut Plate" "welded" [3,] "Magnet" ""

我有一个字符数据矩阵

charMatrix <- structure(c("Bolt", "Nut Plate", "Magnet", "", "Clevis", "welded", 
     "", "Receptacle"), .Dim = c(4L, 2L))

[,1]            [,2]        
[1,] "Bolt"      "Clevis"    
[2,] "Nut Plate" "welded"    
[3,] "Magnet"    ""          
[4,] ""          "Receptacle"
我用这种方法解决了这个问题,但我认为肯定有更简单的方法,无论是在Base R还是Tidyverse中

vec <- charMatrix %>% t() %>% 
  as_tibble(.name_repair = "universal") %>% 
  summarise_all(~ str_trim(paste(., collapse = " "))) %>% 
  unlist() %>% 
  as.character()

vec
[1] "Bolt Clevis"      "Nut Plate welded" "Magnet"           "Receptacle"     
vec%t()%%>%
不兼容(.name\u repair=“universal”)%>%
总结所有内容(~str_trim(粘贴(,collapse=“”)))%>%
取消列表()%>%
as.character()
vec
[1] “螺栓U形夹”“螺母板焊接”“磁铁”“插座”

你能告诉我一个更直接的方法来得到这个答案吗?

我们可以通过将
矩阵
转换为
数据。frame
并使用
粘贴
do.call

trimws(do.call(paste, as.data.frame(charMatrix)))
#[1] "Bolt Clevis"      "Nut Plate welded" "Magnet"           "Receptacle"  
do.call
是矢量化的,与循环相比速度更快


或者使用简单的子集设置和粘贴

trimws(paste(charMatrix[,1], charMatrix[,2]))

两者都是矢量化的。OP的问题是直接应用函数。这两种解决方案都可以做到这一点

因为您有一个矩阵,所以可以使用行
apply
trimws
删除前导/尾随空格

trimws(apply(charMatrix, 1, paste, collapse = ' '))
#[1] "BoltClevis"      "Nut Platewelded" "Magnet"          "Receptacle"     
或者删除空值并粘贴

apply(charMatrix, 1, function(x) paste(x[x!=''], collapse = ' '))

使用tidyverse,您可以轻松完成此任务:

library(tidyverse)

charMatrix %>% 
  as_tibble() %>%
  unite("Var", sep = " ") %>% 
  mutate(Var = str_trim(Var)) %>% 
  pull()
library(tidyverse)

charMatrix %>% 
  as_tibble() %>%
  unite("Var", sep = " ") %>% 
  mutate(Var = str_trim(Var)) %>% 
  pull()