【发布时间】:2022-01-27 04:02:53
【问题描述】:
我有一个数据框,我想根据数据框的给定行和列中的值对其进行分组
my_data <- data.frame(matrix(ncol = 3, nrow = 4))
colnames(my_data) <- c('Position', 'Group', 'Data')
my_data[,1] <- c('A1','B1','C1','D1')
my_data[,3] <- c(1,2,3,4)
grps <- list(c('A1','B1'),
c('C1','D1'))
grp.names = c("Control", "Exp1", "EMPTY")
my_data$Group <- case_when(
my_data$Position %in% grps[[1]] ~ grp.names[1],
my_data$Position %in% grps[[2]] ~ grp.names[2]
)
或
my_data$Group <- with(my_data, ifelse(Position %in% grps[[1]], grp.names[1],
ifelse(Position %in% grps[[2]], grp.names[2],
grp.names[3])))
这些示例可以工作并生成一个带有适当标签的 Group 列,但是我需要灵活地将 grps 列表的长度从 1 调整到大约 25。
我看不到在 for 循环中迭代 case_with 或 ifelse 的方法,例如。
my_data$Group <- for (i in 1:length(grps)){
case_when(
my_data$Well %in% grps[[i]] ~ grp.names[i])
}
这个例子只是删除了 Group 列
处理变量grps 长度的最合适方法是什么?
【问题讨论】:
标签: r dataframe for-loop if-statement