假设您有一个数据框:
TF_name L R
A 1 5
B 10 15
C 17 18
以这种方式操纵它的最佳方法是什么?
TF_name Position
A 1
A 2
A 3
A 4
A 5
B 10
B 11
B 12
B 13
B 14
B 15
C 17
C 18
编辑:我一直在尝试所有答案,但似乎没有一个在这个特定的数据框v
上工作。我创建数据框的方式是为什么这些方法不起作用?
f <- 'GADANCGGCCTAGATGTGAT'
motifs = c('GA','GC','CT','AG','AT')
v <- na.omit(data.frame(do.call(rbind, lapply(stri_locate_all_regex(f, motifs), unlist))))
v <- data.frame(v,Legend=na.omit(unlist(stri_extract_all_regex(f,motifs))))
v <- v[order(v[,1]),]
v <- v[c(3,1,2)]
organizer <- function(df,tracknom) {
names(df)<-c("V1","V2","V3")
newdf <- data.frame(
Name=rep(df$V1, df$V3-df$V2 + 1),
Track=tracknom,
Position=unlist(mapply(seq, df$V2, df$V3))
)
newdf
}
v <- organizer(v,1)
v
Name Track Position.1 Position.2 Position.3 Position.4 Position.5 Position.6 Position.7 Position.8
1 GA 1 1 8 10 12 13 14 18 19
2 GA 1 2 9 11 13 14 15 19 20
3 GC 1 1 8 10 12 13 14 18 19
4 GC 1 2 9 11 13 14 15 19 20
5 CT 1 1 8 10 12 13 14 18 19
6 CT 1 2 9 11 13 14 15 19 20
7 AG 1 1 8 10 12 13 14 18 19
8 AG 1 2 9 11 13 14 15 19 20
9 GA 1 1 8 10 12 13 14 18 19
10 GA 1 2 9 11 13 14 15 19 20
11 AT 1 1 8 10 12 13 14 18 19
12 AT 1 2 9 11 13 14 15 19 20
13 GA 1 1 8 10 12 13 14 18 19
14 GA 1 2 9 11 13 14 15 19 20
15 AT 1 1 8 10 12 13 14 18 19
答案 0 :(得分:2)
尝试
databasehelperhome mHelper = new databasehelperhome(this);
mHelper.open();
library(data.table)#v1.9.4+
setDT(df1)[, list(Position=L:R), TF_name]
# TF_name Position
# 1: A 1
# 2: A 2
# 3: A 3
# 4: A 4
# 5: A 5
# 6: B 10
# 7: B 11
# 8: B 12
# 9: B 13
#10: B 14
#11: B 15
#12: C 17
#13: C 18
答案 1 :(得分:1)
基础R中的一种方式(使用mapply
将开始/结束值提供给seq
;加入;使用rep
使TF_name
向右移动长度)。
newdf <- data.frame(
TF_name=rep(df$TF_name, df$R-df$L+1),
Position=unlist(mapply(seq, df$L, df$R, SIMPLIFY=F))
)
使用plyr
的另一种方式:
library(plyr)
ddply(df, .(TF_name), summarize, Position=seq(L, R))
我确定还有更多 - 你的选择真的。
更新以回应问题更改....
同样的事情,只需更改列名称即可。另外,在SIMPLIFY=F
调用中使用明确的mapply
,恰好所有的结尾都比你的开头多1个mapply
将结果简化为矩阵而不是列表,导致unlist
无所作为。
(这次我添加了with
,但这是因为我懒得在所有内容前面输入v$
。你可以省略并{{1}等等,如果你喜欢)。
v$start