R数据帧计算两列之间的值数并创建新列

R数据帧计算两列之间的值数并创建新列,r,dataframe,R,Dataframe,假设您有一个数据帧: 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

假设您有一个数据帧:

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
f基R中的单向(使用
mappy
seq
提供起始值/结束值;连接在一起;使用
rep
使
TF_name
s的长度正确)

我敢肯定还有更多的,真的是你的选择


更新以响应问题更改

同样,只需更改列名。另外,在
mapply
调用中使用显式的
SIMPLIFY=F
,恰好所有的端点都比起点多1,因此
mapply
将结果简化为矩阵而不是列表,导致
未列出
什么也不做

(这次我用
添加了一个
,但那是因为我懒得在所有东西前面键入
v$
。如果你愿意,你可以省略并执行
v$start
等操作)

试一试

更新
你可以从中得到一些想法。这是我想避免的错误。我刚刚测试了数学。咖啡的答案很好。是的,效果也很好,我只是想把它保存在data.frame中。你可以将结果包装到
setDF
以转换为data.frame。或者像@Pascal那样漂亮的
sequence
linked@Chani:你的编辑似乎改变了你的问题很多。通常情况下,回答原始问题(正确),然后根据问题的变化将其删除会有点混乱。好的,修复了。只需将
SIMPLIFY=F
添加到
mapply
。我已经解释了为什么会发生这种情况。
newdf <- data.frame(
  TF_name=rep(df$TF_name, df$R-df$L+1),
  Position=unlist(mapply(seq, df$L, df$R, SIMPLIFY=F))
)
library(plyr)
ddply(df, .(TF_name), summarize, Position=seq(L, R))
with(v,
  data.frame(
    Legend=rep(Legend, end-start+1),
    Position=unlist(mapply(seq, start, end, SIMPLIFY=F))
  )
)
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
 setDT(v)[, list(Position=start:end), .(Legend, 1:nrow(v))][,nrow:= NULL][]
 #    Legend Position
 #1:     GA        1
 #2:     GA        2
 #3:     GC        8
 #4:     GC        9
 #5:     CT       10
 #6:     CT       11
 #7:     AG       12
 #8:     AG       13
 #9:     GA       13
 #10:    GA       14
 #11:    AT       14
 #12:    AT       15
 #13:    GA       18
 #14:    GA       19
 #15:    AT       19
 #16:    AT       20