【问题标题】:How to subset data using multiple characters in a column如何使用列中的多个字符对数据进行子集化
【发布时间】:2012-02-21 20:45:34
【问题描述】:

这是一个非常简单的问题。

我有一个冗长的数据集,想根据特定列中的某些条目创建一个子集。在这种情况下,我是这样设置的:

示例数据:

> NL

SNP alleles

rs1234 A_T

rs1235 A_G

rs2343 A_T

rs2342 G_C

rs1134 C_G

rs1675 T_A

rs8543 A_T

rs2842 G_A

P <- subset(NL, alleles = "A_T", alleles = "T_A", alleles = "G_C", alleles = "C_G")

这运行没有错误,但生成的 P 无论如何都不是子集(P 的尾部仍然显示与原始 NL 相同数量的条目)。

我做错了什么?

【问题讨论】:

  • 您希望您的subset 成为等位基因invector c('A_T','T_A','G_C','C_G')?附:这是一个提示之谜。

标签: r subset dataformat


【解决方案1】:

最明显的错误是在您的意思是“==”时使用“=”。但我从上下文猜测你真的想“拆分”这些数据:

split(NL, NL$alleles)

这将创建一个数据框列表,每个数据框都有alleles 的值之一。

但也许你确实想使用模式匹配:

NL[ grepl("C_G|G_C|A_T|T_A", NL$alleles), ]
     SNP alleles
1 rs1234     A_T
3 rs2343     A_T
4 rs2342     G_C
5 rs1134     C_G
6 rs1675     T_A
7 rs8543     A_T

并用我认为是您的评论示例进行说明:

P <- read.table(text="V1 V2 V3 V4 V5 V6 alleles
 15116 25 rsX 0 123412 G A G_A 
15117 25 rsX1 0 23432 A C A_C 
15118 25 rsX2 0 234324 A G A_G 
15119 25 rsX3 0 3423 A G A_G 
15120 25 rsX4 0 2343223 C A C_A 
15121 25 rsX5 0 23523423 A G A_G", header=TRUE)

 P[ grepl("G_A", NL$alleles), ]

#       V1       V2 V3        V4 V5 V6 alleles
# 15116 25 rs306910  0 154613671  G  A     G_A

子集版本:

 subset(P, alleles %in% c("G_A", "A_G") )

      V1   V2 V3       V4 V5 V6 alleles
15116 25  rsX  0   123412  G  A     G_A
15118 25 rsX2  0   234324  A  G     A_G
15119 25 rsX3  0     3423  A  G     A_G
15121 25 rsX5  0 23523423  A  G     A_G

【讨论】:

  • 使用 == 时出现以下错误:[.data.frame(x, r, vars, drop = drop) 中的错误:找不到对象“等位基因”可以使用拆分。谢谢!
  • @user1224314 如果是这种情况,那么您在问题中提供的数据和您在计算机上使用的数据会有所不同。我们只能根据您提供的示例数据提供帮助。
  • @user1224314 确保您的NL 对象是一个数据框,并且等位基因列的名称是"alleles"。您可以使用str(NL) 查看它的结构,使用names(NL) 查看列名。
  • @user1224314 您尚未将 == 与其他 cmets 和答案中提供给您的其他更正结合起来。 == 并不是唯一的错误。在重试之前尝试修复这里的人们提出的所有问题。
  • 尽管我的评论帖子中没有格式,但你听到了我的声音。我不知道 grep 可以在 R 中使用。这行得通 - 谢谢!
【解决方案2】:

= 用于传递参数或赋值。您需要的是测试某事是否属实,使用==。您还传递了多个条件,而不是指定应该如何组合。我很确定你想要那些条件中的 any 为真的子集(不是 all),但 R 不是。对于这种情况,您可以使用%in% 运算符:

P <- subset(NL, alleles %in% c("A_T", "T_A", "C_G"))

还请注意,您尝试为subset 提供几个条件,但您并没有告诉它如何组合它们。我可以看到您想要任何条件为真的行,但您必须使用 OR 运算符 | 告诉 R,例如

P <- subset(NL, alleles == "A_T" | alleles == "T_A" | alleles == "C_G")

上面的%in% 运算符就像是这个的简写。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多