-1

我有以下矩阵,我通过它导入了它

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
4

1 回答 1

1

您的问题与&&. &&是仅适用于标量布尔值的逻辑运算(具有快捷能力,因此如果第一个表达式是FALSE,则永远不会评估其他表达式。)。当用向量做逻辑表达式时,只需使用一个普通的&

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

您的导入有点复杂。read.table为您返回完美data.frame的数据集。因此,将 的输出转换read.table为矩阵,然后再将其重新转换为 adata.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'])
于 2013-05-22T16:54:09.953 回答