我在R中有一个双矩阵作为数据框V
,如下所示:
row.names id1 id2 id3
id1 0 2 4
id2 1 0 3
id3 5 1 0
...
如何提取row.names
= id2?
我尝试了以下内容:
id2_row<-V[V[,1]=='id2',]
它不起作用。是因为我有双矩阵吗?我的理解是双矩阵不是数字,因此我不能执行以下操作:V[V[,1]=='id2',]
。这是对的吗?
答案 0 :(得分:3)
生成一些数据
m <- matrix(c(0, 1, 5, 2, 0, 1, 4, 3, 0), nrow = 3)
df <- as.data.frame(m)
row.names(df) <- c("id1", "id2", "id3")
设置data.frame
并保留其名称
with_names <- df[2,]
# 1)
print(with_names)
## V1 V2 V3
##id2 1 0 3
# 2)
df[row.names(df) == "id2" , ]
## V1 V2 V3
##id2 1 0 3
仅供参考:这是子集data.frames
的另一个选项。我添加它是为了完整。
df[2, , drop = TRUE]
子集data.table
。
没有row.names,但子集的工作速度更快。
require(data.table)
DT <- data.table(m)
print(DT)
setkey(DT, V1, V2, V3)
print(DT)
DT[2]
子集matrix
。您可以再次对您所拥有的行进行子集化,但不会获得任何名称。
class(m)
## [1] "matrix"
# Method 1)
m[2,]
## [1] 1 0 3
# Method 2)
ind <- matrix(c(2, 2, 2, 1, 2, 3), nrow = 3)
m[ind]
identical(m[2,], m[ind])
## [1] TRUE
答案 1 :(得分:2)
这是R,因此有很多可能性。最好的方法取决于V究竟是什么以及您希望id2_row
成为什么。
如果V是数字矩阵,那么您可以尝试V["id2", ]
或
id2_row <- V[rownames(V) == "id2", ]
如果V是数据框,而id2是行名,则同样适用:V["id2", ]
或
id2_row <- V[rownames(V) == "id2", ]
如果V是数据框,而row.names
是V列,那么您的建议应该有效,或等效
id2_row <- V[V$row.names == "id2", ]