从数据框中提取行标签(?)

3

从一个 data.frame 开始...

df = data.frame(k=c(1,5,4,7,6), v=c(3,1,4,1,5))
> df
  k v
1 1 3
2 5 1
3 4 4
4 7 1
5 6 5

我可能会运行一些任意的操作...

> foo1 = df[df$k>3,]
> foo2 = head(foo1[order(foo1$v),], 2)
> foo2
  k v
2 5 1
4 7 1

在这个时候,foo2 以某种方式保留了来自 df 的原始行号(在本例中为2和4)。
我该如何提取它们?
> insert_magic_function_here(foo2)
[1] 2 4
1个回答

11

我认为您正在寻找rownames


3
这需要额外说明,引用 foo2[2,] 不会给你标记为 2 的行。而是给你 foo2 数据框中标记为 4 的第二行。 - Justin
@Justin 确实如此。但它完全符合我的使用方式,即 df [as.numeric(rownames(foo2)),] - mat kelcey
3
foo2["2", ]应该返回foo2的第一行。尽管外观可能表明行名是“数字”,但实际上它们是“字符”。 - IRTFM
“df[as.numeric(rownames(foo2)),]” 不就等同于 “foo2” 吗? - Tim P
@TimP 在这种情况下是的,但我的实际问题案例要复杂得多,涉及更多步骤以及添加和删除列。 - mat kelcey
在这种情况下,我建议为每一行设置一个唯一的ID列 - 最好是从数据中派生出来的主键,但整数代码也足够了 - 然后在处理结束时,'foo2' 中剩余的任何ID都告诉您原始数据中需要的行(只需匹配ID)。这将有助于使代码对以后的数据更改具有鲁棒性,并提供额外的保证一切正常。 - Tim P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接