【问题标题】:Ignore missing elements in list with sapply使用 sapply 忽略列表中的缺失元素
【发布时间】:2012-04-07 10:06:23
【问题描述】:

我在数据框中有一个列表(在本例中为df$candpct),我想从列表中提取第一个和第二个元素并将它们放入单独的向量中。

这是数据框的初始结构:

> head(df)
  juris                         candpct
1   101              0.752491, 0.247509
2   102 0.4856056, 0.2850754, 0.1845157
3   103                               1
4   104                               1

我查看了this answer,它向我展示了如何有效地提取第一个元素:

> df$first_place <- sapply(df$candpct,"[[",1)

> head(df)
      juris                         candpct first_place
    1   101              0.752491, 0.247509    0.752491
    2   102 0.4856056, 0.2850754, 0.1845157   0.4856056
    3   103                               1           1
    4   104                               1           1

但如果我尝试运行另一行来提取第二个元素,则会收到错误消息,因为并非所有行都在第二个位置有一个元素。

> df$second_place <- sapply(df$candpct,"[[",2)
Error in FUN(X[[3L]], ...) : subscript out of bounds

理想情况下,如果缺少第二个元素,我希望它用NA0 填充second_place 中的相应行。

我确信有多种方法可以解决这个问题,但是我没有很多使用列表的经验,所以我在开始时遇到了很多麻烦。

提前感谢您的帮助。

【问题讨论】:

  • 尝试使用[ 而不是[[

标签: r


【解决方案1】:

只是跟进我的评论:

l <- list(a = 1,b = 1:2,c = 1:3)
> sapply(l,'[',2)
 a  b  c 
NA  2  2 

【讨论】:

  • 嗯。我想我应该尝试一下!谢谢!自从我链接到的答案发布后的两年内,它的工作方式是否发生了变化?
  • @user1202761 不,我认为 [ 和 [[ 一直都是这样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 2023-02-08
  • 1970-01-01
  • 1970-01-01
  • 2014-02-04
  • 2020-08-14
  • 1970-01-01
相关资源
最近更新 更多