r - 如何从r中数据帧内的列表中提取数字信息?

标签 r dataframe

我在名为 dfgModsPepFiltered_subset 的数据框的第一列中有以下类型的条目:

A640-P641 = 456.123x

尝试使用以下 R 脚本从中提取数字信息:

dfgModsPepFiltered_subset$AA <- regmatches(dfgModsPepFiltered_subset$Peptide,
        gregexpr("[[:digit:]]+", dfgModsPepFiltered_subset$Peptide))

给我:

c("640", "641", "453", "123")

但是,我真正需要的是为 "640""641""456.123" 各添加一个新列。

我尝试了各种取消列出的组合,但似乎无法获得正确的格式。

最佳答案

您可以修改regmatches

 as.data.frame(do.call(`rbind`,
         lapply(regmatches(dfgModsPepFiltered_subset$Peptide,
             gregexpr("[[:digit:].]+", dfgModsPepFiltered_subset$Peptide)), 
                                                        as.numeric))

  #   V1  V2      V3
  #1 640 641 456.123
  #2 620 625 285.400

或者使用 tidyr 中的 extract

library(tidyr)
res <-  extract(dfgModsPepFiltered_subset, Peptide, c('Col1', 'Col2', 'Col3'),
               '[A-Z](\\d+)-[A-Z](\\d+) += +(\\d+\\.\\d+).+', convert=TRUE) 


res
#  Col1 Col2    Col3
#1  640  641 456.123
#2  620  625 285.400

或者您可以使用正则表达式

extract(dfgModsPepFiltered_subset, Peptide, c('Col1', 'Col2', 'Col3'),
        '[^0-9]+([0-9]+)[^0-9]+([0-9]+)[^0-9]+([0-9.]+)[^0-9]+')

或者

library(splitstackshape)
res1 <-  cSplit(dfgModsPepFiltered_subset, 'Peptide', '[^0-9.]', fixed=FALSE)
res1[,names(res1)[!colSums(is.na(res1))], with=FALSE]
#   Peptide_2 Peptide_4 Peptide_7
#1:       640       641   456.123
#2:       620       625   285.400

或者使用strsplit

 as.data.frame(t(sapply(strsplit(dfgModsPepFiltered_subset$Peptide,
                       '[^0-9.]'), function(x) na.omit(as.numeric(x)))))

 #   V1  V2      V3
 #1 640 641 456.123
 #2 620 625 285.400

数据

dfgModsPepFiltered_subset <- data.frame(Peptide= c('A640-P641 = 456.123x',
       'A620-B625 = 285.400x'), stringsAsFactors=FALSE)

关于r - 如何从r中数据帧内的列表中提取数字信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26947138/

相关文章:

python - 从 4 个指定列中只获取两个值并将有效值合并到 2 列中

python - 从字典或列表创建 pandas 数据帧太慢,有什么建议吗?

r - 将csv文件导入R

r - ggplot2 中使用对数刻度的密度图

r - 如何将R对象的结构打印到控制台

r - 为什么使用 Zoo 对象进行回归会产生无法识别的结果

r - 错误 "all entries of ' x' 必须是非负且有限的”

python - 使用plotly创建时间序列散点图

python - 在 Pandas 数据框中将单元格拆分为多行

python - 使用 groupby 获取组中具有最大值的行