【问题标题】:Extract the first item of the list from nested lists从嵌套列表中提取列表的第一项
【发布时间】:2020-08-20 09:18:26
【问题描述】:

我的数据表中有以下列(里面还有更多列表,但我只是提供了简化)

n  col1
1  list(c("1", "2", "3", "5"), c("5", "6", "8", "8"))
2  list(c("9", "10", "11", "12"), c("13", "14", "15", "16"))

我想从行中的每个列表中提取第一个值。所以,我想要结果

n  col2
1  c("1", "5")
2  c("9", "13")

我在这里和互联网上查看了许多关于嵌套列表的示例,看起来应该很容易,但它似乎并不像我想要的那样工作。我使用以下代码变体

   1. dt$col2 <-sapply(dt$col1 , "[[", 1)
  `2. dt$col2 <- lapply(dt$col1, function(l) l[[1]])`
  `3. dt$col2 <- rvest::pluck(dt$col1, 1)`

但它们都给出相同的输出,基本上是第一个列表

n  col2
1  c("1", "2", "3", "5")
2  c("9", "10", "11", "12")

我的理解一定有问题,但我不明白为什么会这样

【问题讨论】:

    标签: r list datatable


    【解决方案1】:

    试试:

    dt$col2 <-sapply(dt$col1 , "[", 1)
    

    (列表的元素不是列表,只是向量,所以一个括号就可以了)

    编辑:

    对于 data.table 中的列:

     dt$col2 <- sapply(dt$col1,function(x){sapply(x,'[',1)})
    

    【讨论】:

    • 它仍然给出相同的输出:(
    • 抱歉,没看到是data.table。尝试:dt$col2
    • 谢谢!很遗憾我还是没听懂。可能只是因为我是 R 新手。现在它在这个地方说意外标记“,”:函数(y),
    • 大声抱歉,再次编辑。发生的事情是您将函数应用于 df1$col1 的每个元素,该函数返回 sapply(x,'[',1)。 (你的数据框有点奇怪,所以解决方案也是!)
    猜你喜欢
    • 2023-03-29
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 2023-03-22
    相关资源
    最近更新 更多