小编LP_*_*640的帖子

如何用重塑r"解冻"数据

我有一个数据框,我使用reshape包融化,我想"解开".

这是融化数据的玩具示例(实际数据帧为500x100或更大):

variable<-c(rep("X1",3),rep("X2",3),rep("X3",3))
value<-c(rep(rnorm(1,.5,.2),3),rep(rnorm(1,.5,.2),3),rep(rnorm(1,.5,.2),3))
dat <-data.frame(variable,value)
dat
 variable     value
1       X1 0.5285376
2       X1 0.5285376
3       X1 0.5285376
4       X2 0.1694908
5       X2 0.1694908
6       X2 0.1694908
7       X3 0.7446906
8       X3 0.7446906
9       X3 0.7446906
Run Code Online (Sandbox Code Playgroud)

每个变量(X1,X2,X3)具有在3个不同时间估计的值(在该玩具示例中恰好相同,但事实并非如此).

我希望以下列形式得到它(返回):

     X1        X2        X3
1 0.5285376 0.1694908 0.7446906
2 0.5285376 0.1694908 0.7446906
3 0.5285376 0.1694908 0.7446906
Run Code Online (Sandbox Code Playgroud)

基本上,我希望变量列在ID(X1,X2等)上排序并成为列标题.我已经尝试了各种演员阵容,dcast,重铸等等.并且似乎无法以我想要的格式获取数据.很容易将数据从宽格式"融化"到更长的格式(例如dat数据集),但是将其恢复到原来很困难.有任何想法吗?我知道这是相对简单的,但我很难概念化如何在reshape或reshape2中执行此操作.

谢谢,LP

r reshape reshape2

16
推荐指数
1
解决办法
2万
查看次数

AWK - 替换匹配行上的特定列,然后打印其他行

我正在尝试改变数千行长的DNA序列的"标题"行中的列/字段.具体来说,我想更改标题的第一个字段(compX_seqy),它始终以">"开头:

前两个序列的一个例子:

 #cat example

 >comp0_seq1 444 [12:23]
 AGAGGACAC
 GATCCAACATA
 AGASCAC
 >comp0_seq2 333 [12:32:599:1]
 GTCGATC
 CYAACY
 CCCCA
 ...
Run Code Online (Sandbox Code Playgroud)

我想在第一列的末尾添加一个"A",对于所有以">"开头的行,

comp0_seq1A

然后打印行的其余部分,然后打印下一行(序列),直到到达下一行">"行(并重复).

我希望输出看起来像这样:

>comp0_seq1A 444 [12:23]
AGAGGACAC
GATCCAACATA
AGASCAC
>comp0_seq2A 333 [12:32:599:1]
GTCGATC
CYAACY
CCCCA
...
Run Code Online (Sandbox Code Playgroud)

我先试了一下:

awk '$1=$1"A"' example

>comp0_seq1A 444 [12:23]
AGAGGACACA
GATCCAACATAA
AGASCACA
>comp0_seq2A 333 [12:32:599:1]
GTCGATCA
CYAACYA
CCCCAA
A
A
Run Code Online (Sandbox Code Playgroud)

它为所有行的第一个字段添加了一个A,所以并不完全.

然后我尝试了这个,使用正则表达式只替换以">"开头的行

# awk '/^>/ {print $1=$1"A";getline;print $0}' example
>comp0_seq1A
AGAGGACAC
>comp0_seq2A
GTCGATC
Run Code Online (Sandbox Code Playgroud)

但是这只会在比赛结束后打印出第一行.那么,如何在匹配/替换之后打印所有/任何行,直到下一个">"?我尝试使用'next',但我想我不明白如何在这种情况下使用它.

有什么建议?我知道我很亲密,正在敲我的键盘.

Thx,LP.

awk sed

4
推荐指数
1
解决办法
2299
查看次数

在bash或sed中逐行计算匹配前后的字符串长度

我有一个DNA测试文件'test',每个都有一个标题或ID,如下所示:

>new
ATCGGC
>two
ACGGCTGGG
>tre
ACAACGGTAGCTACTATACGGTCGTATTTTTT
Run Code Online (Sandbox Code Playgroud)

我想在匹配之前和之后打印每个连续字符串的长度,例如 CGG

输出将如下所示:

>new
2 1
>two
1 5
>tre 
4 11 11 
Run Code Online (Sandbox Code Playgroud)

或者只能在每行的匹配之前和之后具有字符长度.

2 1
1 5 
4 11 11 
Run Code Online (Sandbox Code Playgroud)

我第一次尝试使用sed在找到'>'后打印下一行,然后找到每个grep匹配"CGG"的字节偏移量,我将用它来转换为长度,但这产生了以下结果:

sed -n '/>/ {n;p}' test | grep -aob "CGG" 

2:CGG
8:CGG
21:CGG
35:CGG
Run Code Online (Sandbox Code Playgroud)

从本质上讲,grep是为每个匹配打印字节偏移量,向上计数,而我希望每行独立的字节偏移量(即在每行之后重置).

我想我也需要使用sed进行搜索,因为它逐行操作,但我不知道如何抵消给定字符串中的字节偏移或字符.

任何帮助将非常感激.

string bash awk sed

1
推荐指数
1
解决办法
588
查看次数

标签 统计

awk ×2

sed ×2

bash ×1

r ×1

reshape ×1

reshape2 ×1

string ×1