【问题标题】:R analyse string in column of a big data frame and give value in a separate columnR分析大数据框列中的字符串并在单独的列中给出值
【发布时间】:2020-11-12 13:52:12
【问题描述】:

我有一个包含 20 列的数据框。其中一列由字符串组成。我想分析 R 中特定字母位置的字符串,然后在不同的列中基于此分配一个值。例如,如果字符串是 ABCDEF、AADFEG,我想创建一个包含值的新列,如果 A 在位置 1,则为 1。如果 A 在位置 1,2,则为 1,2。 7 如果 G 位于第 6 位。我一直在尝试使用 str_locate 和 if_else,然后使用 dplyr 包进行变异,但不确定是否有更简单的方法可以做到这一点。 谢谢!

【问题讨论】:

  • 那么你不应该有 26+1=27 列,1 列代表字符串,其他 26 列代表 26 个字母吗?
  • 字符串“AACCCG”的输出是什么——A在位置1和2,G在位置6。结果应该是127127 还是别的什么?
  • 一个带有样本输入和所需输出的可重现的小例子将有助于明确意图。
  • 抱歉没有说得更清楚。但我希望输出为 1,2。以下来自 mat.tho 的代码有效。我也可以用它来添加其他字母。谢谢!

标签: r string


【解决方案1】:

我创建了一个小代码sn-p:

df<-data.frame(a=c("ABCDEF","AADFEG","TRETGTGA"))
df$b<-lapply(gregexpr(pattern = 'A', df$a), function(x) c(unlist(x)) )

在这里,您在向量 df$a 的每个条目上应用一个正则表达式并找到模式 A,从而得到所有 A 的索引强>s。使用 lapply 提取结果(=索引)。最后,您将结果分配给数据框中的新列。

注意

如果找不到模式,则显示-1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2019-04-22
    相关资源
    最近更新 更多