如果这看起来很愚蠢,请提前抱歉,仍在学习R并仍在学习课程。
我创建了一个以列表格式回送3个值的函数。
我正在尝试“分离”这些值并将它们插入到数据框中以供使用。我希望数据框看起来像这样:
# | pyro1 | pyro2 | pyro3 |
# baseline0 | | | |
# drop time | | | |
# drop temp | | | |
# exo time | | | |
# baseline1 | | | |
# max temp | | | |
# baseline2 | | | |
基本上在我的函数上调用lapply
后,我留下了一个如下所示的数据框:
test <- data.frame(c(list(10,1025,1000),list(15,1015,1001),list(9,1019,1029)))
其中我有三个列表,每个列表有3个值。我需要每个列表中的所有第一个值都进入上面模板数据框的特定行。
例如:
# | pyro1 | pyro2 | pyro3 |
# baseline0 | 1025 | 1015 | 1019 |
# drop time | 10 | 15 | 9 |
# drop temp | 1000 | 1001 | 1029 |
# exo time | | | |
# baseline1 | | | |
# max temp | | | |
# baseline2 | | | |
我已经尝试过使用rbind,认为这会因为某些原因而起作用,但这不起作用,而是给出这样的东西:
# | pyro1 | pyro2 | pyro3 |
# baseline0 |list(10.5, 1025, 1023.5) |list(16, 1042, 1036)|list(14.5, 1042, 1038)|
# drop time | | | |
# drop temp | | | |
# exo time | | | |
# baseline1 | | | |
# max temp | | | |
# baseline2 | | | |
抱歉,我没有这么明确的工作示例,如果您需要更多信息请告诉我,但我认为我的问题有些基本(遗憾)。
此外,我可能会以“不正确”的方式解决问题,很乐意接受有关不同方法的任何建议。
由于
EDIT1
在玩unlist
之后,我已经整理了一些丑陋的代码,这些代码为我提供了我正在寻找的格式,但我认为这可能是一种非常迂回的做事方式。
testt <- data.frame(c(list(10,1025,1000),list(15,1015,1001),list(9,1019,1029)))
xxx<-data.frame(unlist(testt))
xx1 <- cbind(xxx[1,1],xxx[4,1],xxx[7,1])
xx2 <- cbind(xxx[2,1],xxx[5,1],xxx[8,1])
xx3 <- cbind(xxx[3,1],xxx[6,1],xxx[9,1])
xx4 <- rbind(xx1,xx2,xx3)
xx4
答案 0 :(得分:3)
您的意见:
test <- structure(list(list(10.5, 1025, 1023.5), list(16, 1042, 1036), list(14.5, 1042, 1038)),
.Dim = c(1L, 3L), .Dimnames = list( NULL, c("pyro1", "pyro2", "pyro3")))
使用rbind.data.frame
并使用do.call
将其提供给列表。我们使用setNames
设置列名称,但也可以使用names(...) <-
。
setNames(do.call(rbind.data.frame, test), dimnames(test)[[2]])
# pyro1 pyro2 pyro3
#2 10.5 1025 1023.5
#21 16.0 1042 1036.0
#3 14.5 1042 1038.0
答案 1 :(得分:0)
在您的示例中,data.frame由列而不是行绑定,但data.frames最好通过列列表,其中每列具有它自己的特定含义和格式,但绑定列表列 - 明智的是这个概念的转换。
所有值都属于同一类(此例中的数字) 你可以将它们行绑定在一起形成一个矩阵,然后将矩阵转换为data.frame
mx <- rbind(list(10,1025,1000),list(15,1015,1001),list(9,1019,1029))
df <- as.data.frame(mx)
如果列表的元素不是同一个类,则可以创建数据 首先是帧,然后将它们行绑定在一起。
df <- rbind(as.data.frame(list(a =10,b=1025,c=1000)),
as.data.frame(list(a =15,b=1015,c=1001)),
as.data.frame(list(a =9,b=1019,c=1029)))
请注意,第二种方法可能更可取,因为它会将列表元素的名称保留为data.frame中的字段名称。但是,它确实要求列表具有相同的名称(在这种情况下,&#39; a&#39;&#39;&#39;&#39;&#39; c&#39;)