linux中将矩阵数据转换为一列数据

1、测试数据

root@PC1:/home/test# ls
a.txt
root@PC1:/home/test# cat a.txt
i u k f
2 3 8 7
s j 9 4

 

2、形式1(按照行进行排列)

root@PC1:/home/test# ls
a.txt
root@PC1:/home/test# cat a.txt
i u k f
2 3 8 7
s j 9 4
root@PC1:/home/test# cat a.txt | sed 's/ /\n/g'
i
u
k
f
2
3
8
7
s
j
9
4
root@PC1:/home/test# cat a.txt | tr " " "\n"
i
u
k
f
2
3
8
7
s
j
9
4

 

R实现:

> dir()
[1] "a.txt"
> dat <- read.table("a.txt", header = F)
> dat
  V1 V2 V3 V4
1  i  u  k  f
2  2  3  8  7
3  s  j  9  4
> res <- data.frame()
> for (i in 1:nrow(dat)) {
+   colx <- t(dat[i,])
+   colnames(colx) <- "colname"
+   res <- rbind(res, colx) 
+ }
> res
    colname
V1        i
V2        u
V3        k
V4        f
V11       2
V21       3
V31       8
V41       7
V12       s
V22       j
V32       9
V42       4

 

3、形式2(按照列进行排列)

root@PC1:/home/test# ls
a.txt
root@PC1:/home/test# cat a.txt
i u k f
2 3 8 7
s j 9 4
root@PC1:/home/test# for i in `seq $(head -n 1 a.txt | awk '{print NF}')`; do cut -d " " -f $i a.txt; done
i
2
s
u
3
j
k
8
9
f
7
4

 

R实现:

> dir()
[1] "a.txt"
> dat <- read.table("a.txt", header = F)
> dat
  V1 V2 V3 V4
1  i  u  k  f
2  2  3  8  7
3  s  j  9  4
> res <- vector()
> for (i in 1:ncol(dat)) {
+   res <- c(res, dat[,i])
+ }
> res <- as.data.frame(res)
> res
   res
1    i
2    2
3    s
4    u
5    3
6    j
7    k
8    8
9    9
10   f
11   7
12   4

 

posted @ 2022-03-22 22:32  小鲨鱼2018  阅读(165)  评论(0编辑  收藏  举报