as.integer使字符NA

时间:2018-02-05 14:45:27

标签: r matrix integer na

我有一些生物样本的测序数据。要读取的文件首先包含7个包含字符的列,因为它们具有基因名称和代码等。从第8列开始,我的样本包含计数数据,因此根据基因的数量分配给基因的数字给定的样本。

问题是我的CSV文件包含非整数值,所以我需要将它们转换为整数(as.integer)。

如果我删除包含基因信息等的列并且只有值的矩阵,这绝对可以找到!但是,我需要基因信息,因此需要包含此信息的列,但如果我在整个数据框中执行as.integer,则任何字符都会返回为NA,因此我也会丢失所有这些信息!

我正在努力,因为我猜我应该制作前7列as.characters?或者将as.integer函数应用到第8列,直到最后,但是我很难想到要执行此操作的代码!

1 个答案:

答案 0 :(得分:0)

尝试使用lapply()as.integer()应用于除前7列之外的所有列?

df[, -seq(1, 7)] <- lapply(df[, -seq(1, 7)], as.integer)

#result
> df 
   c1 c2 c3 c4 c5 c6 c7  c8  c9
1   G  F  Y  M  V  M  X 104  13
2   J  E  F  O  Q  V  H  67  11
3   N  Q  P  L  S  K  L 107 -13
4   U  I  C  E  M  F  Y 102 -14
5   E  X  Z  S  L  B  O 129   7
6   S  K  I  Y  Y  C  F 125  15
7   W  O  A  P  A  G  J  55  -2
8   M  S  H  C  J  J  V  30  17
9   L  G  X  N  N  L  B 129   7
10  B  N  V  G  Z  T  S  99 -12

示例数据:

set.seed(1)
df <- data.frame(
  c1 = sample(LETTERS, 10),
  c2 = sample(LETTERS, 10),
  c3 = sample(LETTERS, 10),
  c4 = sample(LETTERS, 10),
  c5 = sample(LETTERS, 10),
  c6 = sample(LETTERS, 10),
  c7 = sample(LETTERS, 10),
  c8 = rexp(10, rate = 0.01),
  c9 = rnorm(10, sd = 20)
)

> df
   c1 c2 c3 c4 c5 c6 c7        c8         c9
1   G  F  Y  M  V  M  X 104.94389  13.939268
2   J  E  F  O  Q  V  H  67.88807  11.133264
3   N  Q  P  L  S  K  L 107.98811 -13.775114
4   U  I  C  E  M  F  Y 102.82469 -14.149903
5   E  X  Z  S  L  B  O 129.22616   7.291639
6   S  K  I  Y  Y  C  F 125.31054  15.370658
7   W  O  A  P  A  G  J  55.46414  -2.246924
8   M  S  H  C  J  J  V  30.12830  17.622155
9   L  G  X  N  N  L  B 129.31247   7.962118
10  B  N  V  G  Z  T  S  99.45558 -12.240528