【问题标题】:In R, how to add a column to a data frame based on the contents of the first column?在 R 中,如何根据第一列的内容向数据框中添加一列?
【发布时间】:2015-01-19 06:29:24
【问题描述】:

我有一个只有一列的数据框,如下所示:

>df

     Sample_Name
1    GW16F1_A-1
2    GW16F1_A-10
3    GW16F1_A-12
4    GW16F2_A-2
5    GW16F2_A-3
6    GW16F2_A-5
7    GW16V1_A-6
8    GW16V1_A-7
9    GW16V2_A-8
10   GW16V2_A-9

我想根据 Sample_Name 列的内容在此数据框中添加第二列,因此输出如下所示:

>df
     SampleName   SampleGroup
1    GW16F1_A-1   F1
2    GW16F1_A-10  F1
3    GW16F1_A-12  F1
4    GW16F2_A-2   F2
5    GW16F2_A-3   F2
6    GW16F2_A-5   F2
7    GW16V1_A-6   V1
8    GW16V1_A-7   V1
9    GW16V2_A-8   V2
10   GW16V2_A-9   V2

是否有一个函数可以读取列的内容并基于它输出一个新的向量?

【问题讨论】:

  • 这看起来像一个简单的substr 可以工作。不需要正则表达式。
  • 是否有比您在示例中显示的数字更多的数字,例如 F13 中的数字?
  • 不在这个特定的数据集中,但我很想知道基于@AnandaMahto 的回答的解决方法。
  • @PinkSharpie,这取决于您可以在多大程度上概括数据集中的模式。例如,您能否将其概括为“V 或 F 后跟一定数量的数字,然后是下划线”的序列?如果这是概括,regex 实际上会比substr 更好。
  • 例如gsub(".*([VF][0-9]+)_.*", "\\1", df$Sample_Name)....

标签: r matrix vector pattern-matching substr


【解决方案1】:

鉴于您的示例输入,substr 应该足够了。

试试:

> transform(df, sampleGroup = substr(df$Sample_Name, 5, 6))
   Sample_Name sampleGroup
1   GW16F1_A-1          F1
2  GW16F1_A-10          F1
3  GW16F1_A-12          F1
4   GW16F2_A-2          F2
5   GW16F2_A-3          F2
6   GW16F2_A-5          F2
7   GW16V1_A-6          V1
8   GW16V1_A-7          V1
9   GW16V2_A-8          V2
10  GW16V2_A-9          V2

【讨论】:

  • 谢谢!太棒了。尽快接受答案。
【解决方案2】:

你也可以使用sub函数。

df$sampleGroup <- sub("^.*(..)_A.*", "\\1", df$Sample_Name)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 2021-12-26
    • 2022-08-13
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 2020-05-04
    相关资源
    最近更新 更多