今天大脑不能正常运作。我有一个数据框如下:
V1 V2
1 8 200
2 8 200
3 8 200
4 8 200
5 34 250
6 8 2500
我想返回一个列表,列表中的每个元素都包含我数据框中每个唯一元素对的索引向量。该列表应如下所示:
[[1]]
[1] 1 2 3 4
[[2]]
[1] 5
[[3]]
[1] 6
我引用了this线程 - 非常相似 - 但仍然难倒。
提前致谢SO。
答案 0 :(得分:4)
假设mydf
是您的数据框,并且您可以尝试为您的rownames返回字符值,那么您可以尝试:
> lapply(split(mydf, list(mydf$V1, mydf$V2), drop=TRUE), row.names)
$`8.200`
[1] "1" "2" "3" "4"
$`34.250`
[1] "5"
$`8.2500`
[1] "6"
否则有点啰嗦:
> lapply(split(mydf, list(mydf$V1, mydf$V2), drop=TRUE),
function(x) as.numeric(row.names(x)))
$`8.200`
[1] 1 2 3 4
$`34.250`
[1] 5
$`8.2500`
[1] 6
注意:当然,如果您的rownames与原始数据框中的行号不对应,则不能将它们用作提取索引。
答案 1 :(得分:1)
通过组合拆分2列:
split(seq_len(nrow(dat)),paste(dat$V1,dat$V2,sep='/'))
$`34/250`
[1] 5
$`8/200`
[1] 1 2 3 4
$`8/2500`
[1] 6
答案 2 :(得分:0)
这是使用tapply
和interaction
的选项,假设您的data.frame名为dd
with(dd, tapply(seq.int(nrow(dd)), interaction(V1, V2, drop=T),
identity, simplify=F))
# $`8.200`
# [1] 1 2 3 4
#
# $`34.250`
# [1] 5
#
# $`8.2500`
# [1] 6