如何在R中的melt()之后添加列表项的索引
我的工作清单如下:如何在R中的melt()之后添加列表项的索引,r,R,我的工作清单如下: > l <- list(c(2,4,9), c(4,2,6,1)) > m <- melt(l) > m value L1 2 1 4 1 9 1 4 2 2 2 6 2 1 2 i指示3个值属于第一个列表元素,4个值属于第二个列表元素 请问我该如何存档它,有人能帮忙吗?不如ave优雅,但工作: transform(m, i=un
> l <- list(c(2,4,9), c(4,2,6,1))
> m <- melt(l)
> m
value L1
2 1
4 1
9 1
4 2
2 2
6 2
1 2
i
指示3个值属于第一个列表元素,4个值属于第二个列表元素
请问我该如何存档它,有人能帮忙吗?不如
ave
优雅,但工作:
transform(m, i=unlist(sapply(rle(m$L1)$length, seq_len)))
# value L1 i
#1 2 1 1
#2 4 1 2
#3 9 1 3
#4 4 2 1
#5 2 2 2
#6 6 2 3
#7 1 2 4
或
m$i不如ave
优雅,但工作:
transform(m, i=unlist(sapply(rle(m$L1)$length, seq_len)))
# value L1 i
#1 2 1 1
#2 4 1 2
#3 9 1 3
#4 4 2 1
#5 2 2 2
#6 6 2 3
#7 1 2 4
或
m$i您可以使用splitstackshape
library(splitstackshape)
getanID(m, 'L1')[]
# value L1 .id
#1: 2 1 1
#2: 4 1 2
#3: 9 1 3
#4: 4 2 1
#5: 2 2 2
#6: 6 2 3
#7: 1 2 4
或使用base R
transform(stack(setNames(l, seq_along(l))), .id= rapply(l, seq_along))
您可以使用splitstackshape
library(splitstackshape)
getanID(m, 'L1')[]
# value L1 .id
#1: 2 1 1
#2: 4 1 2
#3: 9 1 3
#4: 4 2 1
#5: 2 2 2
#6: 6 2 3
#7: 1 2 4
或使用base R
transform(stack(setNames(l, seq_along(l))), .id= rapply(l, seq_along))
为了完整起见,还有其他一些选择
data.table(这基本上就是getanID
正在做的事情)
dplyr
library(dplyr)
m %>%
group_by(L1) %>%
mutate(i = row_number())
基本R(摘自@user20650的评论)
为了完整起见,还有其他一些选择
data.table(这基本上就是getanID
正在做的事情)
dplyr
library(dplyr)
m %>%
group_by(L1) %>%
mutate(i = row_number())
基本R(摘自@user20650的评论)
熔化后做,m$isetDT(m)[,i:=seq_len(.N),L1]
用数据表
pacage熔化后做,m$isetDT(m)[,i:=seq_len(.N),L1]
用数据表
pacage不知道序列,真的很好!!哦,在赛昆斯背后藏着一个聪明的。。。!为了这个发现!不知道序列,真的很好!!哦,在赛昆斯背后藏着一个聪明的。。。!为了这个发现!