代码之家  ›  专栏  ›  技术社区  ›  Niko Gamulin

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

r
  •  0
  • Niko Gamulin  · 技术社区  · 14 年前

    按以下方式读取数据

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

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

       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 回复  |  直到 14 年前
        1
  •  3
  •   Roman LuÅ¡trik    14 年前

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

    你所拥有的是一个数据框架和至少一个你要处理的列是一个因素。关于如何更改列的类,请参见Dirk的答案。

    命令

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

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

    data[6] / data[9]
    

    data[, 6] / data[, 9]
    

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

        2
  •  3
  •   Dirk is no longer here    14 年前

    data.frame .

    这个 数据帧 对象可以包含各种类型: numeric , character , factor , ...

    read.csv() 等等,你 stringsAsFactors 选择。我想是的 至少是 数据行中有文本,因此R决定将其作为一个因子进行解码,并 急板地! 不再可以对列执行直接的数学运算。

    简言之,做 summary(data) class() 在所有的柱子上。根据需要转换,或将 变量的值不同或两者都不同。

    一旦你的数据是数字,你可以分割,切片,骰子。。。随你的便。