Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
求R中唯一元素的指数_R_List_Unique - Fatal编程技术网

求R中唯一元素的指数

求R中唯一元素的指数,r,list,unique,R,List,Unique,大脑今天工作不好。我有一个数据框,如下所示: 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 我已经引用了这个线程——非常相似——但仍然很难理解 提前谢谢。假设mydf是您的数据帧,并且您可以为您的行名返回字符值,您可以尝

大脑今天工作不好。我有一个数据框,如下所示:

  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
我已经引用了这个线程——非常相似——但仍然很难理解


提前谢谢。

假设
mydf
是您的数据帧,并且您可以为您的行名返回字符值,您可以尝试:

> 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

注意:当然,如果您的行名与原始数据帧中的行号不对应,则不能将其用作提取索引。

假设
mydf
是您的数据帧,并且您可以为行名返回字符值,您可以尝试:

> 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

注意:当然,如果您的行名与原始数据帧中的行号不对应,则不能将其用作提取索引。

组合拆分两列:

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

组合拆分两列:

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

这里有一个使用
taply
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

这里有一个使用
taply
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

几乎完全相同的答案,我即将张贴+1!虽然在本例中它们可能是数字,但请注意row.name并不总是数字。通常最好将它们保持为角色,因为这样也可以很容易地将它们子集。索引和row.names可以是完全不同的。几乎和我要发布的+1答案完全相同!虽然在本例中它们可能是数字,但请注意row.name并不总是数字。通常最好将它们保持为角色,因为这样也可以很容易地将它们子集。索引和row.name可以非常不同。+1您也可以这样做:
split(seq_len(nrow(dat)),list(dat$V1,dat$V2),drop=TRUE)
+1出色地使用了
drop=TRUE
。我不知道这个+1你也可以这样做:
split(seq_len(nrow(dat)),list(dat$V1,dat$V2),drop=TRUE)
+1巧妙地使用
drop=TRUE
。我不知道这个!