选择具有特定条件的矩阵行

时间:2013-05-22 15:56:46

标签: r

我有以下矩阵,我是通过

导入的
data <- as.matrix(read.table("sample1.txt"), header = T)

然后我将其转换为数据框

data.df <- as.data.frame(data)

但我无法通过

获得此矩阵的子集
sub3 <- subset(data.df, V1 == "General0" && V2 == "0")

此命令无法正常工作,只需选择所有帧即可。请记住,我的文件在第一列和第二列中具有不同的值。

你能帮助我如何选择矩阵子集。

         V1 V2           V3
1  General0  0 1.2946021618
2  General0  0 1.0946334452
3  General0  0 0.8449582803
4  General0  0 0.5990934855

1 个答案:

答案 0 :(得分:1)

问题在于&&&&是一个逻辑操作,仅适用于标量布尔值(具有快捷功能,因此如果第一个表达式为FALSE,则其他表达式永远不会被计算。)。使用向量执行逻辑表达式时,只需使用普通&

sub3 <- subset(data.df, V1 == "General0" & V2 == "0")

您的导入有点复杂。 read.table会为您提供完整的data.frame数据集。因此,将read.table的输出转换为矩阵,然后将其重新转换为data.frame只会产生一种效果。您将所有值转换为字符(因为您有一个字符列),然后创建一个包含这些字符值的data.frame,结果将列V2V3转换为因子。

如果有充分理由将所有列作为因子,则这是一种有效(但不常见)的方法。但是,我很难想象一个用例。我想

data <- read.table("sample1.txt", header = F)
sub <- subset(data, V1 == 'General0' & V2 == 0)

好多了。


修改

如果您只需要一个专栏,那么您至少有三个选项(顺便说一下,这些选项都有详细记录):

col3 <- sub3$V3

col3 <- with(data.df, V3[V1=='General0' & V2 == '0')

col3 <- data.df$V3[data.df$V1 == 'General0' & data.df&V2 == '0'])