在R中取消列表并保留列表名称

时间:2014-05-21 15:58:02

标签: r

我的数据类似于:

listdata <- list(matrix(c(1,1,1,1,3,3,3,3),nrow=2,ncol=4),matrix(c(1,1,1,1,2,2,2,2),nrow=2))
names(listdata) <- c("5555","5566")

RowData <- lapply(listdata, "rownames<-", c("from","to"))

FrameData <- lapply(RowData, function(x) as.data.frame(x))

现在我按需要取消列表,但列表名称已更改。如何保留列表名称?

as.matrix(unlist(FrameData))

没有.V11列名称的通缉输出:

       [,1]
 5555    1
 5555    1
 5555    1
 5555    1
 5555    3
 5555    3
 5555    3
  .....
  .....
编辑:这不是一个很好的例子,因为在我的情况下,我没有5555.V1但只添加了数字:1,2,3,4 ......所以我实际上是这个:

    [,1]
 55551    1
 55552    1
 55553    1
 55554    1
 55555    3
 .... 
 555536   3
 555537   3
  .....

 Rname <- rownames(listdata)
 strtrim(Rname, nchar(Rname)-1)
问题是编号越来越大......所以问题是定义y nchar(x)-y

3 个答案:

答案 0 :(得分:3)

您可以重命名这样的rownames例如:

mm <- as.matrix(unlist(FrameData))
rownames(mm) <- sub('[.].*','',rownames(mm))

答案 1 :(得分:2)

library(reshape2)

melt(FrameData)
#Using  as id variables
#Using  as id variables
#   variable value   L1
#1        V1     1 5555
#2        V1     1 5555
#3        V2     1 5555
#4        V2     1 5555
#5        V3     3 5555
#6        V3     3 5555
#7        V4     3 5555
#8        V4     3 5555
#9        V1     1 5566
#10       V1     1 5566
#11       V2     1 5566
#12       V2     1 5566
#13       V3     2 5566
#14       V3     2 5566
#15       V4     2 5566
#16       V4     2 5566

答案 2 :(得分:0)

我遇到了同样的问题,但我的行名是 url,所以我无法改变命名约定,所以这里有一个对我有用的解决方案

names(listdata)<- paste(L1,"|||", sep = "")
df <- data.frame("variable" = (unlist(listdata, recursive = FALSE, use.names = TRUE)))
df1<-data.frame("variable"=df$variable, "values" = values "L1" = row.names(df))  
df1$L1<- sapply(strsplit(df1$L1, split='|||', fixed=TRUE), function(x) (x[1]))