数值取决于应用的应用族,R
我有一个表,有一些数字和字符列,一些是因子和其他整数数值取决于应用的应用族,R,r,casting,apply,R,Casting,Apply,我有一个表,有一些数字和字符列,一些是因子和其他整数 >additional.metadata sample_id patient_id condition SOM test 1387 1 1 CTL 22 1 7588 1 1 CTL 35 2 7429 1 1 CTL 23 3 7600 1
>additional.metadata
sample_id patient_id condition SOM test
1387 1 1 CTL 22 1
7588 1 1 CTL 35 2
7429 1 1 CTL 23 3
7600 1 1 CTL 35 4
我试图将整个表转换为一个矩阵,并根据使用的apply
选项(即apply
vssapply
),更改$SOM中的一些值。下面是一个例子:
> apply(additional.metadata, 2, function(x) as.numeric(as.factor(x)))
sample_id patient_id condition SOM test
[1,] 1 1 1 2 1
[2,] 1 1 1 4 2
[3,] 1 1 1 3 3
[4,] 1 1 1 4 4
[5,] 1 1 1 1 5
[6,] 1 1 1 3 6
> sapply(additional.metadata, function(x) as.numeric(as.factor(x)))
sample_id patient_id condition SOM test
[1,] 1 1 1 22 1
[2,] 1 1 1 35 2
[3,] 1 1 1 23 3
[4,] 1 1 1 35 4
[5,] 1 1 1 11 5
[6,] 1 1 1 23 6
请有人知道我遗漏了什么/误解了什么?提前感谢。最有可能的变化是由于
as.numeric(as.factor(x))
造成的
为了确保您的值符合预期,您需要将其转换为字符
或完全跳过因子阶段
使用as.numeric(as.character(as.factor(x)))
或as.numeric(as.character(x))
关于您为什么需要这样做的解释可以在这个问题的顶部答案中找到:
(这是一个常见的问题。)
apply
始终将其第一个参数转换为矩阵。当存在任何字符
列时,所有内容都变为字符
,句点。通常,您会在列的子集上使用apply
,例如,apply(x[,c(1:3,5)],2,…)
,以便只使用真正需要的数字列。如果您需要帧帮助(作为数字
、因子
和字符
),则必须以dput(头(x))的形式提供可用数据
;控制台输出不明确。谢谢,我不知道这个apply
的矩阵转换,非常有用。您的预期输出是什么?我想用数值转换$SOM col,但保留其原始数值,而不重新编码它们(这就是我问的原因)。谢谢Garces,我不是没有理由这么说的:在给我们提供样本数据时使用dput
提供了明确的数据。您提供的内容不清楚,因为R的控制台输出不区分整数
、整数
、整数、系数
、数字字符。所以我们不能帮助你,除非你提供一些能代表你所拥有的东西。同样地,请通过向我们提供来自dput(head(additional.metadata))
的输出来提供数据。感谢您的回答,但是如果我使用as.numeric(as.character(x))
因为字符cols,一些值被错误地转换为NAs。