假设我有以下矩阵:

mat <- matrix(data = c(1, 2, 3, 0, 0, 0, 0, 0, 0, 
                       0, 0, 0, 2, 3, 4, 0, 0, 0,
                       0, 0, 0, 0, 0, 0, 5, 6, 7),
              nrow = 9, 
              dimnames = list(c(paste0("x", 1:3),
                                paste0("y", 1:3),
                                paste0("z", 1:3)),
                              c("a", "b", "c")))

   a b c
x1 1 0 0
x2 2 0 0
x3 3 0 0
y1 0 2 0
y2 0 3 0
y3 0 4 0
z1 0 0 5
z2 0 0 6
z3 0 0 7

我想要一个只保留非零元素的向量,而不是矩阵.

red <- apply(mat, 1, function(x) x[x != 0])
x1 x2 x3 y1 y2 y3 z1 z2 z3 
 1  2  3  2  3  4  5  6  7 

有没有办法让缩减向量也保留列名?优选模式"colname+character+rowname".请参阅下面的所需输出.请注意,我们事先不知道将有多少列/行,也不知道它们是如何命名的.

a=x1 a=x2 a=x3 b=y1 b=y2 b=y3 c=z1 c=z2 c=z3 
 1    2    3    2    3    4    5    6    7 

提前谢谢!

推荐答案

我们也可以使用asplitunlist(但得到.而不是=):

red <- unlist(asplit(mat, 2))
red <- red[red != 0]

输出:

a.x1 a.x2 a.x3 b.y1 b.y2 b.y3 c.z1 c.z2 c.z3 
   1    2    3    2    3    4    5    6    7 

当然,您也可以使用@user321797所建议的一些正则表达式来精确地获得所需的输出:

names(red) <- gsub(names(red), pattern = "\\.", replacement = "=")

输出:

a=x1 a=x2 a=x3 b=y1 b=y2 b=y3 c=z1 c=z2 c=z3 
   1    2    3    2    3    4    5    6    7 

R相关问答推荐

如何计算具有NA的行的更改百分比

将coord_sf与geom_spatraster一起使用会更改分辨率

Select R中列未排序的收件箱中的最后一个按顺序编号的列

R图中的字体大小和字体样式(带有R底图)

用单个表达匹配多个替代模式

多重RHS固定估计

用derrr在R中查找组间的重复项

获取列中值更改的行号

derrr mutate case_when grepl不能在R中正确返回值

bslib::card_header中的shine::downloadButton,图标而不是文本

使用整齐的计算(curl -curl )和杂音

多个模拟序列间的一种预测回归关系

如何将网站图像添加到带有极坐标的面包裹条形图?

仅在R中的数据集开始和结束时删除所有 Select 列的具有NA的行

在数据帧列表上绘制GGPUP

根据纬度和距离连接两个数据集

将全局环境变量的名称分配给列表中的所有元素

如何在R中使用hmm TMB提前一步预测观察到的状态?

如何使用字符串从重复的模式中提取多个数字?

`-`是否也用于数据帧,有时使用引用调用?