我有一个关于铝核素的 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-2ECPN等.

推荐答案

由于您似乎没有多少唯一的标识符,所以正则表达式可能有些过分,match ng的dict可能更容易一些.

dict <- read.table(text="
  decay               label
   'B-'         'beta minus'
'EC+B+' 'electronic capture'
    'A'              'alpha'
", header=TRUE)

decays$label <- dict$label[match(decays$decay, dict$decay)]
decays <- transform(decays, label=replace(label, is.na(label), 'others')) 
decays
#          symbol   a  z   n              decay
# 1      Ba 142 56  86    B-         beta minus
# 2      Bi 207 83 124 EC+B+ electronic capture
# 3      Po 199 84 115    B-         beta minus
# 4      Rn 227 86 141     A              alpha
# 5      Ca  34 20  14    B-         beta minus
# 6      Am 239 95 144                   others
# 7      Pm 146 61  85    B-         beta minus
# 8      Ir 203 77 126    B-         beta minus
# 9      Cd 120 48  72 EC+B+ electronic capture
# 10     Na  26 11  15    B-         beta minus

或者使用stringi::stri_replace_all_regex.

repl <- c("beta plus", "beta minus", "alpha", "electronic capture")
decays$label <- stringi::stri_replace_all_regex(
  decays$decay,
  pattern=c("^.?B\\+.?", "^.?B-.?", "A", "^.?E.?.*"),
  replacement=repl,
  vectorize_all=FALSE
)
decays$label[!decays$label %in% repl] <- 'others'
decays
#    symbol   a  z   n decay              label
# 1      Ba 142 56  86    B-         beta minus
# 2      Bi 207 83 124 EC+B+ electronic capture
# 3      Po 199 84 115    B-         beta minus
# 4      Rn 227 86 141     A              alpha
# 5      Ca  34 20  14    B-         beta minus
# 6      Am 239 95 144                   others
# 7      Pm 146 61  85    B-         beta minus
# 8      Ir 203 77 126    B-         beta minus
# 9      Cd 120 48  72 EC+B+ electronic capture
# 10     Na  26 11  15    B-         beta minus

Data:

decays <- structure(list(symbol = 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), decay = structure(c(3L, 
    4L, 3L, 2L, 3L, 1L, 3L, 3L, 4L, 3L), levels = c(" ", "A", 
    "B-", "EC+B+"), class = "factor")), class = "data.frame", row.names = c(NA, 
-10L))

R相关问答推荐

使用lapply的重新定位功能

使用sensemakr和fixest feols模型(R)

ggplot 2中的地块底图(basemaps_gglayer()不起作用)

如何使用rmarkdown和kableExtra删除包含折叠行的表的第一列的名称

如何 bootstrap glm回归、估计95%置信区间并绘制它?

在使用tidyModels和XGBoost的二进制分类机器学习任务中,所有模型都失败

如何基于两个条件从一列中提取行

如何将网站图像添加到带有极坐标的面包裹条形图?

过滤名称以特定字符串开头的文件

是否有新方法来更改Facet_WRAP(Ggplot2)中条文本的文本 colored颜色 ?

基于R中的辅助向量中的值有条件地连接向量中的字符串

当由base::限定时,`[.factor`引发NextMethod错误

Data.table::Shift type=允许扩展数据(&Q;LAG&Q;)

R没有按顺序显示我的有序系数?

通过匹配另一个表(查找表)中的列值来填充数据表,并在另一个变量上进行内插

R:改进实现简单模型

如何在一个GGPLATE中绘制多个灰度平滑?

GgHighlight找不到它创建的列:`Highlight..1`->;`Highlight.....`

通过分析特定列中的字符串在数据框中创建新的行和列

如何在分组蜂群小区中正确定位标签