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

- python
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
- R
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 更方便一些