如何通过将已有行的值与R dplyr组合,将行添加到dataframe中

如何通过将已有行的值与R dplyr组合,将行添加到dataframe中,r,dataframe,dplyr,tidyr,R,Dataframe,Dplyr,Tidyr,我有下表,我想对其进行修改: 类型 位置 比率 数 百分比 脱氧核糖核酸 基因间 0.00026933362 225173 40.757876065 脱氧核糖核酸 基因内 0.00021799943 41250 7.466536342 线 基因间 0.00027633335 48619 8.800376494 线 基因内 0.00031015097 9578 1.733684487 献给亲爱的@akrun,他教我如何做到这一点: library(dplyr) library(purrr) lib

我有下表,我想对其进行修改:

类型 位置 比率 数 百分比 脱氧核糖核酸 基因间 0.00026933362 225173 40.757876065 脱氧核糖核酸 基因内 0.00021799943 41250 7.466536342 线 基因间 0.00027633335 48619 8.800376494 线 基因内 0.00031015097 9578 1.733684487
献给亲爱的@akrun,他教我如何做到这一点:

library(dplyr)
library(purrr)
library(tibble)

df %>%
  group_split(type) %>%
  map_dfr(~ add_row(.x, type = first(.x$type), position = "genome", 
                    ratio = ((.x$ratio[2]*.x$number[2]) + (.x$ratio[1]+.x$number[1])) / 
                      (.x$number[1]+.x$number[2]), number = .x$number[1] + .x$number[2], 
                    percentage = .x$percentage[1] + .x$percentage[2]))


# A tibble: 6 x 5
  type  position      ratio number percentage
  <chr> <chr>         <dbl>  <int>      <dbl>
1 DNA   intergenic 0.000269 225173      40.8 
2 DNA   intragenic 0.000218  41250       7.47
3 DNA   genome     0.845    266423      48.2 
4 LINE  intergenic 0.000276  48619       8.80
5 LINE  intragenic 0.000310   9578       1.73
6 LINE  genome     0.835     58197      10.5 
库(dplyr)
图书馆(purrr)
图书馆(tibble)
df%>%
分组(类型)%>%
map_dfr(~add_row(.x,type=first(.x$type),position=“genome”,
比率=(.x$ratio[2]*.x$number[2])+(.x$ratio[1]+.x$number[1])/
(.x$number[1]+.x$number[2]),number=.x$number[1]+.x$number[2],
百分比=.x$百分比[1]+.x$百分比[2]))
#一个tibble:6x5
类型位置比率数字百分比
1 DNA基因间0.00026922517340.8
2 DNA基因内0.000218 41250 7.47
3 DNA基因组0.845 266423 48.2
4线基因间0.000276 48619 8.80
5线基因内0.000310 9578 1.73
6系基因组0.8355819710.5
这里有一个解决方案

dplyr
并不意味着创建新行,因为结果通常不被认为是“整洁的”。在您的例子中,您希望总结数据(为此,我使用了一个自定义函数)。您可以单独使用摘要,也可以使用
bind_rows()
将其添加到原始表中

需要注意的是,您可能需要检查
number\u intragenic
及其好友的长度是否为1,这样可以防止出现一些意外错误,例如
stopifnot(length(number\u intragenic)==1

库(tidyverse)
df=读取。表格(标题=T,文本=
类型位置比率数字百分比
基因间DNA 0.0002693362 225173 40.757876065
DNA基因内0.0002179943 41250 7.466536342
线间0.00027633335 48619 8.800376494
基因内系0.00031015097 9578 1.733684487
")
get_ratio=函数(数字、比率、位置){
数字\基因内=数字[位置==“基因内”]
比率\基因内=比率[位置==“基因内”]
数字\u基因间=数字[位置=“基因间”]
比率\基因间=比率[位置=“基因间”]
((数字\基因内*比率\基因内)+(数字\基因间+比率\基因间))/(数字\基因内+数字\基因间)
}
df_汇总=df%>%
分组依据(类型)%>%
总结(比率=获取比率(数量、比率、位置),
数字=总和(数字),
百分比=总和(百分比))%>%
突变(position=“genome”,.after=“type”)
绑定行(df,df\u摘要)%>%
排列(类型)
#>类型位置比率数字百分比
#>1 DNA基因间0.00026933622517340.757876
#>2 DNA基因内0.000217994 41250 7.466536
#>3 DNA基因组0.845204778726642348.224412
#>4线间0.0002763333 48619 8.800376
#>5线基因内0.0003101510 9578 1.733684
#>6系基因组0.8354721189 58197 10.534061

由(v2.0.0)于2021-05-12创建,只需添加一点,即不必绑定行,也可以完全连接“df”和“df\u summary”以获得相同的结果。与提供的其他解决方案相比,此解决方案更易于理解,这就是为什么我选择它作为最佳解决方案的原因。谢谢。