繁体   English   中英

从两个data.frames创建列表列表的功能

[英]Function to create list of list from two data.frames

我有两个data.frames firstdf和secondf,(下面的示例数据。)我正在尝试创建一个函数,该函数将输出类似下面的ExampleList数据的结果。 我想创建一个列表列表,在该列表中,它从firstdf抓取第一行条目,并将它们的值放在exampleList的事物和测试字段中,然后从seconddf的另一个字段抓取前三个值,将它们连接在一起,然后保存它们放在exampleList的otherthing字段中,然后移至firstdf中的下一行,并移至seconddf中的下3行。 循环对我来说有点棘手,因此绝对感谢您提供提示。

data:

dput(firstdf)
structure(list(thing = structure(1:3, .Label = c("thing1", "thing2", 
"thing3"), class = "factor"), test = structure(1:3, .Label = c("test1", 
"test2", "test3"), class = "factor")), .Names = c("thing", "test"
), row.names = c(NA, -3L), class = "data.frame")

dput(seconddf)
    structure(list(otherthing = structure(c(4L, 5L, 6L, 7L, 8L, 9L, 
    1L, 2L, 3L), .Label = c("thing10", "thing11", "thing12", "thing4", 
    "thing5", "thing6", "thing7", "thing8", "thing9"), class = "factor"), 
        other = structure(c(9L, 6L, 7L, 2L, 3L, 1L, 8L, 4L, 5L), .Label = c("fads", 
        "oiu", "qwer", "rewa", "rewq", "sfas", "sfwg", "tre", "xdfs"
        ), class = "factor")), .Names = c("otherthing", "other"), row.names = c(NA, 
    -9L), class = "data.frame")

并输出:

 dput(ExampleList)
list(structure(list(thing = "thing1", test = "test1", otherthing = c("thing4", 
"thing5", "thing6")), .Names = c("thing", "test", "otherthing"
)), structure(list(thing = "thing2", test = "test2", otherthing = c("thing7", 
"thing8", "thing9")), .Names = c("thing", "test", "otherthing"
)), structure(list(thing = "thing3", test = "test3", otherthing = c("thing10", 
"thing11", "thing12")), .Names = c("thing", "test", "otherthing"
)))
[[1]]
[[1]]$thing
[1] "thing1"

[[1]]$test
[1] "test1"

[[1]]$otherthing
[1] "thing4" "thing5" "thing6"


[[2]]
[[2]]$thing
[1] "thing2"

[[2]]$test
[1] "test2"

[[2]]$otherthing
[1] "thing7" "thing8" "thing9"


[[3]]
[[3]]$thing
[1] "thing3"

[[3]]$test
[1] "test3"

[[3]]$otherthing
[1] "thing10" "thing11" "thing12"

你可以使用Map ,的多元版本lapply (与splitotherthing )。 第一个参数是一个函数,该函数应用于将并行迭代的多个参数,因此

ExampleList <- Map(list, 
    thing = as.character(firstdf$thing), 
    test = as.character(firstdf$test), 
    otherthing = split(as.character(seconddf[[1]]), rep(1:3, each = 3)))

str(ExampleList)

## List of 3
##  $ thing1:List of 3
##   ..$ thing     : chr "thing1"
##   ..$ test      : chr "test1"
##   ..$ otherthing: chr [1:3] "thing4" "thing5" "thing6"
##  $ thing2:List of 3
##   ..$ thing     : chr "thing2"
##   ..$ test      : chr "test2"
##   ..$ otherthing: chr [1:3] "thing7" "thing8" "thing9"
##  $ thing3:List of 3
##   ..$ thing     : chr "thing3"
##   ..$ test      : chr "test3"
##   ..$ otherthing: chr [1:3] "thing10" "thing11" "thing12"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM