我在数据框中有一个列表(在本例中为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
理想情况下,如果第二个元素丢失,我希望它用 NA
或 0
填充 second_place
中的相应行。
我确信有多种方法可以解决这个问题,但我没有太多使用列表的经验,所以我在开始时遇到了很多麻烦。
预先感谢您的帮助。
最佳答案
只是跟进我的评论:
l <- list(a = 1,b = 1:2,c = 1:3)
> sapply(l,'[',2)
a b c
NA 2 2
关于r - 使用 sapply 忽略列表中缺少的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10051024/