有如下表所示的数据:
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语句”创建一个只包含数值不等于零的特定列的矩阵?
请帮我解决问题。
感谢。
答案 0 :(得分:0)
您尚未指定数据的格式,但如果您有矩阵或data.frame,则应该可以使用R extract operator([
)来指定只有你想要的列。您可以为该规范提供逻辑值(TRUE
或FALSE
)的向量,因此您只需要一个能够返回所需逻辑值的函数。
作为矩阵的一个简单示例,您可以应用函数来查看矩阵的每列中是否存在任何非零值:
> 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