【发布时间】:2014-11-27 18:00:32
【问题描述】:
我需要从一行中找到最大值,不包括第一列(这是一个字符)。
我有一个表 MDist
> MDist
c.1. V2 V3 V4 V5 V6 V7 V8
1 repeticiones 0 0 1 1 1 2 <NA>
2 dias 0 0 12 15 20 28 sumas
3 0 NA NA NA NA NA NA 0
4 0 NA NA NA NA NA NA 0
5 12 NA NA 0 3 8 30 41
6 15 NA NA 3 0 5 26 34
7 20 NA NA 8 5 0 16 29
8 28 NA NA 15 13 8 0 36
我只保留最后一列并转置它:
> b<-data.frame(t(MDist[2:nrow(MDist), ncol(MDist)]))
> b
X1 X2 X3 X4 X5 X6 X7
1 sumas 0 0 41 34 29 36
sapply(b,class)
X1 X2 X3 X4 X5 X6 X7
"factor" "factor" "factor" "factor" "factor" "factor" "factor"
当我尝试将其转换为数字时,我得到一个全为 1 的向量。
> c<-as.numeric(b[1,2:ncol(b)])
> c
[1] 1 1 1 1 1 1
还有 as.numeric(as.character)) 我遇到了同样的问题:
> as.numeric(as.character(b[1,2:ncol(b)]))
[1] 1 1 1 1 1 1
我需要将原始表 (b) 的每个值除以该行的最大值得到一行。那将是:
0 0 1 34/41 29/41 36/41
【问题讨论】:
-
改用
as.numeric(as.character(b[1,2:ncol(b)]))。 -
让我们回到您读取数据的方式。如果这些列是
factor并且您希望它们是numeric,则有问题。你是如何将数据读入 R 的?如果将因子转换为数字然后取最大值,不要期望结果是正确的。 -
你得到所有
factors,因为你转置了数据集,它给出了一个matrix,如果你有一个character列,所有其他列都将更改为character。当您将其转换为data.frame而不使用stringsAsFactors=FALSE时,这些列将转换为factor。 -
@Gaby P 是的,这就是我提到的关于转换为矩阵的内容。 Matrix 只能容纳一个类。当您的所有列都是数字时,它最有效。否则,只有一个字符列,所有其他列都将转换为字符。因此,转换为 data.frame,不会自动将字符重新转换为数字。我什至不明白使用
t的原因。为什么不能在保持原始结构的同时进行此计算?请查看我更新的帖子,其中对原始数据集进行了类似的计算。 -
@Gaby P 因为
MDist是一个data.frame(我没见过str(MDist)),它可以容纳几个classes。如果你想转置data.frame。识别数字列并进行转置t(MDist[sapply(MDist, is.numeric)])话虽如此,我认为transpose的效率并不高。您可以使用rowSums、rowMeans` 等进行逐行操作,当然还有pmax、pmin与data.frame一起使用
标签: r type-conversion row