R中data.frame的组内计算

R中data.frame的组内计算,r,R,在我的输入data.framedf.中我想根据以下标准添加一个组列,该列应为高或低: 高:如果每个患者的表达式中位数高于0 低:如果每个患者的表达式中值等于0 我的问题是如何定义中位数应在患者中计算 df.in df.out Expression Cell Patient Group 0.00 MM02_48 MM01 High 3.00 MM02_50 MM01 High 1.00 MM02_51 MM02 High

在我的输入data.frame
df.中
我想根据以下标准添加一个组列,该列应为高或低: 高:如果每个
患者的
表达式中位数高于0
低:如果每个
患者的
表达式
中值等于0

我的问题是如何定义中位数应在
患者中计算

df.in

df.out

  Expression    Cell Patient Group
       0.00 MM02_48    MM01 High
       3.00 MM02_50    MM01 High
       1.00 MM02_51    MM02 High
       1.79  MM02_5    MM02 High
       0.00 MM02_61    MM03 Low
       0.00 MM02_72    MM03 Low

您可以尝试使用
dplyr

您可以使用
groupby
按患者计算中位数,并使用
mutate
中的和
ifelse
语句根据表达式的中位数分配
High
Low

library(dplyr)

Expression <- c(0.00, 3.00, 1.00, 1.79, 0.00, 0.00)
Cell <- c("MM02_48", "MM02_50", "MM02_51", "MM02_5", "MM02_61", "MM02_72")
Patient <- c("MM01", "MM01", "MM02", "MM02", "MM03", "MM03")


df <- as_tibble(cbind(Expression, Cell, Patient))
df$Expression <- as.numeric(Expression)

df %>% group_by(Patient) %>% mutate(Group = ifelse(median(Expression) >= 1, "High", "Low"))

      Expression Cell    Patient Group
         <dbl>   <chr>  <chr>   <chr>
    1       0    MM02_48 MM01    High 
    2       3    MM02_50 MM01    High 
    3       1    MM02_51 MM02    High 
    4       1.79 MM02_5  MM02    High 
    5       0    MM02_61 MM03    Low  
    6       0    MM02_72 MM03    Low  
库(dplyr)

Expression您可以尝试使用
dplyr

您可以使用
groupby
按患者计算中位数,并使用
mutate
中的和
ifelse
语句根据表达式的中位数分配
High
Low

library(dplyr)

Expression <- c(0.00, 3.00, 1.00, 1.79, 0.00, 0.00)
Cell <- c("MM02_48", "MM02_50", "MM02_51", "MM02_5", "MM02_61", "MM02_72")
Patient <- c("MM01", "MM01", "MM02", "MM02", "MM03", "MM03")


df <- as_tibble(cbind(Expression, Cell, Patient))
df$Expression <- as.numeric(Expression)

df %>% group_by(Patient) %>% mutate(Group = ifelse(median(Expression) >= 1, "High", "Low"))

      Expression Cell    Patient Group
         <dbl>   <chr>  <chr>   <chr>
    1       0    MM02_48 MM01    High 
    2       3    MM02_50 MM01    High 
    3       1    MM02_51 MM02    High 
    4       1.79 MM02_5  MM02    High 
    5       0    MM02_61 MM03    Low  
    6       0    MM02_72 MM03    Low  
库(dplyr)

表达式我建议您看看如何使用
data.table
,它对于此类操作非常有用

在您的情况下,这可以是dne,如下所示:

library(data.table)

# make dummy data
x <- data.frame(expr = rnorm(20), pat = rep(letters[1:5], each=4))
x <- as.data.table(x)

x[, ("group"):= ifelse(median(expr) > 0, "high", "low"), pat]
x
库(data.table)
#制作虚拟数据

x我建议您看看如何使用
data.table
,它对于此类操作非常有用

在您的情况下,这可以是dne,如下所示:

library(data.table)

# make dummy data
x <- data.frame(expr = rnorm(20), pat = rep(letters[1:5], each=4))
x <- as.data.table(x)

x[, ("group"):= ifelse(median(expr) > 0, "high", "low"), pat]
x
库(data.table)
#制作虚拟数据
x