生信修炼

dplyr-pandas 分组变量处理

2019-09-29  本文已影响0人  caokai001

目的:按照motif 进行分组,再计算value1 = value[2] / value[1] + value[2] / value[3]
如motif A,计算0.66/.0.35+0.66/0.22

image.png

pandas 处理时,注意类型变换。agg 输入的类型是series,转成np.array 再进行切片

image.png
import pandas as pd
import numpy as np
import string

data=pd.DataFrame({"chr" : [1]*12,
                   "start" : np.linspace(100, 210, 12),
                   "end" : np.linspace(110, 220, 12),
                   "value" : np.random.rand(12),
                   "motif" : list(string.ascii_letters[26:30]*3)})
def s(df): 
     x=np.array(df) 
     L=x[0] 
     M=x[1] 
     R=x[2] 
     return (M+1)/(L+1)+(M+1)/(R+1) 

In [61]: data.groupby("motif")["value"].apply(s)                                                                                      
Out[61]: 
motif
A    2.844838
B    2.184652
C    1.923304
D    1.965128
Name: value, dtype: float64

data <- data.frame(chr = rep(1, 12),
                   start = seq(100, 210, 10),
                   end = seq(110, 220, 10),
                   motif = rep(letters[1:4], each = 3),
                   value = sample(1:100, 12))
data

library(tidyverse)
data %>%
  group_by(motif) %>%
  summarise(value1 = value[2] / value[1]  + value[2] / value[3])

数据框R 更方便一些

上一篇 下一篇

猜你喜欢

热点阅读