R中data.frame的组内计算
在我的输入data.frameR中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
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