选择r中的特定变量

时间:2015-04-01 20:03:22

标签: r if-statement subset

有如下表所示的数据:

v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15

4  0  0  2  0  0  0  0  0   0   0   0   0   0   0

1  0  0  1  0  0  0  0  0   0   0   0   0   0   0

2  0  0  1  0  0  0  0  0   0   0   0   0   0   0

1  0  0  1  0  0  0  0  0   0   0   0   0   0   0

2  0  0  3  0  0  0  0  0   0   0   0   0   0   0

我想创建一个具有特定变量列的新矩阵,其数值不等于零(在这种情况下,特定变量列为v1和v4)。

我知道子集函数但我找不到使用“if语句”选择条件列的方法。

我的意思是......如何使用“if语句”创建一个只包含数值不等于零的特定列的矩阵?

请帮我解决问题。

感谢。

1 个答案:

答案 0 :(得分:0)

您尚未指定数据的格式,但如果您有矩阵或data.frame,则应该可以使用R extract operator[)来指定只有你想要的列。您可以为该规范提供逻辑值(TRUEFALSE)的向量,因此您只需要一个能够返回所需逻辑值的函数。

作为矩阵的一个简单示例,您可以应用函数来查看矩阵的每列中是否存在任何非零值:

> a
     [,1] [,2] [,3] [,4]
[1,]    0    1    0    4
[2,]    0    2    0    5
[3,]    0    3    0    6

> a[, apply(a, 2, function(x) { return(any(x != 0)) })]
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6

这个相同的提取机制也适用于data.frames:

> a
  V1 V2 V3 V4
1  0  1  0  4
2  0  2  0  5
3  0  3  0  6
> a[, sapply(a, function(x) { return(any(x != 0)) })]
  V2 V4
1  1  4
2  2  5
3  3  6