1

所以我有一个充满核苷酸信息的数据框(称为 gen):每个值是 A、C、G 或 T。我希望用 1 替换 A,用 2 替换 C,用 3 替换 G,用 4 替换 T。当我使用该功能gen[gen==A] = 1时,我收到错误:

[<-.data.frame( , gen == A, value = 1)中的错误*tmp*:找不到对象“A”

我什至尝试过使用gen <- replace(gen, gen == A, 1),但它给了我同样的错误。有谁知道如何解决这个错误?如果没有,是否可以在 R 中安装一个包,其中包含将 A、C、G 和 T 转换为数值的程序?

谢谢

4

1 回答 1

1

您需要将 A 括在引号中,否则 R 会查找名为 A 的变量。如果列是字符向量:

R> gen = data.frame(x = sample(c("A", "C", "G", "T"), 10, replace = TRUE), y = sample(c("A", "C", "G", "T"), 10, replace=  TRUE), stringsAsFactors = FALSE)
R> gen[gen == "A"] = 1
R> gen
   x y
1  1 1
2  C C
3  G T
4  T T
5  G G
6  G G
7  1 1
8  C C
9  T 1
10 1 1

也是一次做所有事情的一种方法

R> library(car)
R> sapply(gen, recode, recodes = "'A'=1; 'C'=2; 'G'=3; 'T'=4")
      x y
 [1,] 1 1
 [2,] 2 2
 [3,] 3 4
 [4,] 4 4
 [5,] 3 3
 [6,] 3 3
 [7,] 1 1
 [8,] 2 2
 [9,] 4 1
[10,] 1 1

如果列是因子

R> gen = data.frame(x = sample(c("A", "C", "G", "T"), 10, replace = TRUE), y = sample(c("A", "C", "G", "T"), 10, replace=  TRUE))
R> sapply(gen, as.numeric)
      x y
 [1,] 1 1
 [2,] 2 4
 [3,] 1 2
 [4,] 4 1
 [5,] 2 2
 [6,] 1 4
 [7,] 4 3
 [8,] 3 3
 [9,] 2 4
[10,] 4 2
于 2013-07-21T03:14:20.397 回答