我有一个关于铝核素的 Big Data 集,我想按最有可能的衰变来对它们进行分组.我已经生成了以下代码,其中的数据框是我的 Big Data 框的一个样本,我想知道是否可以以任何方式简化这一点.根据H.Wickham的说法,一个人永远不应该复制并粘贴超过两次,我最终复制并粘贴了四次,但我所做的任何try 要么涉及循环,要么涉及更长的代码.
# Prepring data base sample
Sym <- c("Ba", "Bi", "Po", "Rn", "Ca", "Am", "Pm", "Ir", "Cd", "Na")
A <- c(142, 207, 199, 227, 34, 239, 146, 203, 120, 26)
Z <- c(56, 83, 84, 86, 20, 95, 61, 77, 48, 11)
N <- c(86, 124, 115, 141, 14, 144, 85, 126, 72, 15)
dcy <- c("B-", "EC+B+", "B-", "A", "B-", " ", "B-", "B-", "EC+B+", "B-")
decays <- data.frame(symbol = Sym, a = A, z = Z, n = N, decay = as.factor(dcy))
rm(Sym, A, Z, N, dcy)
# Implementation of the name change
decays_type <- levels(decays$decay)
decays_type
# Filters
beta_p_filter <- decays$decay %in% decays_type[grep("^.?B\\+.?", decays_type)]
beta_m_filter <- decays$decay %in% decays_type[grep("^.?B-.?", decays_type)]
alpha_filter <- decays$decay %in% decays_type[grep("A", decays_type)]
epsilon_filter <- decays$decay %in% decays_type[grep("^.?E.?", decays_type)]
other_filter <- !(alpha_filter | beta_p_filter | beta_m_filter | epsilon_filter)
# Grouping the isotopes according to the most likely decay
decays$label[beta_p_filter] <- "beta plus"
decays$label[beta_m_filter] <- "beta minus"
decays$label[alpha_filter] <- "alpha"
decays$label[epsilon_filter] <- "electronic capture"
decays$label[other_filter] <- "other"
decays
这个示例是自包含的,可以正常工作,但像这样的过滤和分组看起来并不美观,我想知道是否有更有效的方法来做同样的事情.
谢谢你能给我的任何帮助或提示.
这grep
个正则表达式比采样数据集中所需的要通用一些,但 Big Data 集中有更多类型的衰变,例如2B-
、2EC
、P
、N
等.