Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.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

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_Dataframe - Fatal编程技术网

在r中从列表转换为数据帧

在r中从列表转换为数据帧,r,list,dataframe,R,List,Dataframe,我需要从列表中找出类似的数据帧,并将它们放入数据帧中。我创建了一个玩具示例: nn <- list() h <- data.frame(a = c(5,6), j = c(8,1), g = c("d","o")) rnz <- c("test1","test2") o <- data.frame(a = c(1,2), j = c(6,4), g = c("r","u")) rownames(h) <- rnz rownames(o) <- rnz i &l

我需要从列表中找出类似的数据帧,并将它们放入数据帧中。我创建了一个玩具示例:

nn <- list()
h <- data.frame(a = c(5,6), j = c(8,1), g = c("d","o"))
rnz <- c("test1","test2")
o <- data.frame(a = c(1,2), j = c(6,4), g = c("r","u"))
rownames(h) <- rnz
rownames(o) <- rnz
i <- 1:4
nn$set1 <- list(num = i, df = h)
nn$set2 <- list(num = i / 2, df = o)
但是,当我这样做的时候

df <- lapply(nn, function(x) x$df[ , c(1,2)])
df2 <- lapply(df, function(x) tibble::rownames_to_column(x, "var"))

df3 <- do.call(rbind, lapply(df2, function(c) as.data.frame(c, row.names = NULL)))
如何删除行列中的.1、.2等?有更简洁的方法吗?

dplyr::bind\u rows有一个.id参数来强制元素名为列。purrr::map_df将其包装,包括.id参数,因此您可以直接从nn转换:

bind_rows有一个.id参数,用于将元素名强制为列。purrr::map_df将其包装,包括.id参数,因此您可以直接从nn转换:

我们可以将rbindlist与idcol参数一起使用

我们可以将rbindlist与idcol参数一起使用


但这是最简单的方法。您有自己的行名,只需将它们转换为列名即可。然后您要删除gsubpattern='[.][0-9]',replacement=,df3$collumnthattusedtoberowname的.1.2,这是最简单的方法。您有自己的行名,只需将它们转换为列名即可。然后你想删除.1.2,gsubpattern='[.][0-9]',replacement=,df3$collumnthattusedtoberownamesnice你有没有遇到任何使用Purrr的小案例或例子?软件包中的文档非常简洁,发行说明是一个很好的起点。一个常见的用法是。但从根本上说,这是一个简单的范例:map就像lappy,内置了一些快捷方式,后缀指定了如何像vapply一样简化结果,但不那么烦人,因此map_df应用了一个函数,然后简化为data.frame.thx——哈德利的这篇演讲也很好。此外,这是非常有帮助的。哎呀,这段视频是我之前评论中的第三个链接应该指向的。我没有意识到他在R4D中添加了purrr;这可能是最好的开始来源。很好-你有没有遇到任何使用Purrr的小插曲或例子?软件包中的文档非常简洁,发行说明是一个很好的起点。一个常见的用法是。但从根本上说,这是一个简单的范例:map就像lappy,内置了一些快捷方式,后缀指定了如何像vapply一样简化结果,但不那么烦人,因此map_df应用了一个函数,然后简化为data.frame.thx——哈德利的这篇演讲也很好。此外,这是非常有帮助的。哎呀,这段视频是我之前评论中的第三个链接应该指向的。我没有意识到他在R4D中添加了purrr;这可能是最好的入门资料。这是我第一次发现data.table术语比hadley术语更容易理解。这是我第一次发现data.table术语比hadley术语更容易理解。谢谢。
df <- lapply(nn, function(x) x$df[ , c(1,2)])
df2 <- lapply(df, function(x) tibble::rownames_to_column(x, "var"))

df3 <- do.call(rbind, lapply(df2, function(c) as.data.frame(c, row.names = NULL)))
         var a j
set1.1 test1 5 8
set1.2 test2 6 1
set2.1 test1 1 6
set2.2 test2 2 4
library(purrr)

       # extract data.frame elements
nn %>% map('df') %>% 
    # add rownames to each data.frame; coerce result to data.frame with element names as column
    map_df(tibble::rownames_to_column, 'var', .id = 'name')

##   name   var a j g
## 1 set1 test1 5 8 d
## 2 set1 test2 6 1 o
## 3 set2 test1 1 6 r
## 4 set2 test2 2 4 u
library(data.table)
rbindlist(lapply(nn, function(x) transform( x$df[1:2], 
         var = row.names(x$df))), idcol = "name")
#    name a j   var
#1: set1 5 8 test1
#2: set1 6 1 test2
#3: set2 1 6 test1
#4: set2 2 4 test2