我有以下矩阵,我是通过
导入的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
答案 0 :(得分:1)
问题在于&&
。 &&
是一个逻辑操作,仅适用于标量布尔值(具有快捷功能,因此如果第一个表达式为FALSE
,则其他表达式永远不会被计算。)。使用向量执行逻辑表达式时,只需使用普通&
:
sub3 <- subset(data.df, V1 == "General0" & V2 == "0")
您的导入有点复杂。 read.table
会为您提供完整的data.frame
数据集。因此,将read.table
的输出转换为矩阵,然后将其重新转换为data.frame
只会产生一种效果。您将所有值转换为字符(因为您有一个字符列),然后创建一个包含这些字符值的data.frame,结果将列V2
和V3
转换为因子。
如果有充分理由将所有列作为因子,则这是一种有效(但不常见)的方法。但是,我很难想象一个用例。我想
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'])