r - 条件循环以获取基于组的字符串长度
问题描述
我有一个带有多个 R*CI 的数据框想要创建一个条件循环,它将检查列中最长的字符串并将其标记为 group1,然后将其内容与列中的其他字符串进行比较以进行匹配。条件是,如果列中存在与最长字符串匹配的任何字符串,则将其标记为组 1。如果存在任何新元素,则将其标记为下一组。
STR "G,D,E","F" "D,E,F","G" "D,E","F" "A,B","C" “光盘” “A”、“B”
输出应该是这样的:
STR集团 "G,D,E","F" 1 "D,E,F","G" 1 "D,F","E" 1 "D,E","F" 1 "A,B","C" 2 "C","D" 3 "A","B" 2
解决方案
这是第一次尝试。我假设给定的数据结构是一个包含两列的数据框,就像在您的示例中一样。这是我所做的:
str_1 <- c("G,D,E", "D,E,F", "D,E", "A,B", "C", "A")
str_2 <- c("F", "G", "F", "C", "D", "B")
str_df <- data.frame(str_1, str_2)
merged_str <- paste(str_df[,1], str_df[,2], sep=",")
str_list <- strsplit(merged_str, ",")
is_in_group <- function(letters, group){
for (letter in letters) {
if(!(letter %in% group)) {
return(FALSE)
}
}
return(TRUE)
}
groups <- list()
groups[[1]] <- str_list[[1]]
group_vec <- rep(0, length(str_list))
group_vec[1] <- 1
for (i in 2:length(str_list)) {
curr_letters <- str_list[[i]]
new_group = TRUE
for (g in 1:length(groups)) {
if(is_in_group(curr_letters, groups[[g]])) {
group_vec[i] <- g
new_group = FALSE
break
}
}
if (new_group) {
groups[[length(groups)+1]] <- curr_letters
group_vec[i] <- length(groups)
}
}
推荐阅读
- math - 将错误状态代码中的字节标志转换为 int
- r - R中具有极小值的算术
- mobaxterm - 如何在 Mobaxterm 中关闭语法高亮
- javascript - Fullcalendar V4 通过 documentId 获取初始化日历
- python - NLP - 使用哪种技术对段落标签进行分类?
- python - 从它们来自的句子中标记单词
- kotlin - 将vargs值传递给Kotlin中具有多个参数的另一个函数?
- python - 在pygame中的列表上旋转
- java - 如何使用 JSP 在 Spring MVC 中配置验证检查?
- javascript - 解析月份列表序列后更改