2012-04-07 47 views
2

我在数据框中有一个列表(在本例中为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相应的行。

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

在此先感谢您的帮助。

+0

尝试使用'['而不是'[['。 – joran 2012-04-07 02:03:23

回答

3

只是跟进我的评论:

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

嗯。我想我应该尝试过!谢谢!自从我链接到的答案发布后的两年内,这种工作方式是否发生了变化? – user1202761 2012-04-07 02:18:27

+0

@ user1202761不,我认为[和[[一直都是这样的。 – joran 2012-04-07 03:01:07