如何在R中选择矩阵元素?

时间:2010-10-16 17:18:36

标签: r

按以下方式阅读数据

data<-read.csv("userStats.csv", sep=",", header=F)

我试图在特定位置选择一个元素。

数据示例(前五行)如下(V2是日期,V3是星期几):

   V1               V2
1 00002781A2ADA816CDB0D138146BD63323CCDAB2                 2010-09-04
2 00002D2354C7080C0868CB0E18C46157CA9F0FD4                 2010-09-04
3 00002D2354C7080C0868CB0E18C46157CA9F0FD4                 2010-09-07
4 00002D2354C7080C0868CB0E18C46157CA9F0FD4                 2010-09-08
5 00002D2354C7080C0868CB0E18C46157CA9F0FD4                 2010-09-17
                              V3 V4 V5          V6 V7 V8          V9
1 Saturday                        2  2         615  1  1          47
2 Saturday                        2  2          77  1  1          43
3 Tuesday                         1  3         201  1  1         117
4 Wednesday                       1  1          44  1  1          74
5 Friday                          1  1           3  1  1          18

我尝试按照以下方式在第一行中将第6列与第9列分开:

data[1,6]/data[1,9]

但是它返回了一个错误

[1] NA
Warning message:
In Ops.factor(data[1, 6], data[1, 9]) : / not meaningful for factors

然后我尝试只选择一个元素

> data[2,9]
[1]          43
11685 Levels:            0           1           2           3 ...       55311

但不知道这些级别是什么以及导致错误的原因。有谁知道如何在特定位置数据[行,列]中选择元素?

谢谢!

2 个答案:

答案 0 :(得分:3)

R中的标准建模数据结构是data.frame

data.frame个对象可以包含多种类型:numericcharacterfactor,...

现在,当通过read.csv()等人阅读数据时,可以stringsAsFactors选项的默认值所咬。我假设数据中的至少行有文本,所以R决定将其解码为因子而 presto!你不再能对列进行直接的数学运算

简而言之,在所有列上执行summary(data)和/或class()扫描。根据需要进行转换,或将stringsAsFactors变量转换为其他值或两者。

一旦您的数据是数字,您可以根据需要进行分割,切片,骰子......

答案 1 :(得分:3)

我最喜欢检查变量类的工具是str()

您所拥有的是一个数据框,并且您尝试使用的至少一个列是一个因素。请参阅Dirk关于如何更改列类的答案。

命令

data[1,6]/data[1,9]

选择第六列第一行中的值,并除以第九列第一行中的值。这是你想要的吗?如果要使用整个列(而不仅仅是第一行)中的值,则应编写

data[6] / data[9]

data[, 6] / data[, 9]

两个参数对于data.frames都是等效的。