如何解决快速实施列表扩展
我希望加快以下实施速度。似乎tidyr不能胜任该任务,或者我没有正确使用它。基本上,您会看到一个列表列表,其中每个子列表要么固定长度为3,要么是单个键值对。我想采用此结构并将其扩展到每个观察值只有一行的位置,这是subject x column
的乘积。任何帮助表示赞赏。
library(dplyr)
library(tidyr)
is.empty <- function(x) is.null(x) || is.na(x) || x == "" || (is.list(x) && length(x) == 0)
df <- data.frame(
id = c("ikorewnhg","3iuoy2ji34")
)
df$listoflists <- list(
list(
item1 = list(
Found = 0
),item2 = list(
Found = 1,var1 = "foo",var2 = NULL,var3 = "char",var4 = 42,subject = "item2"
),item3 = list(
Found = 0
)
),list(
item1 = list(
Found = 1,var1 = "fooe",var2 = "bare",var3 = list(),var4 = 39,subject = "item1"
),item2 = list(
Found = 0
),item3 = list(
Found = 1,var1 = "baked",var2 = "tt",var3 = "far",subject = "item3"
)
)
)
df$listoflists <- lapply(df$listoflists,function(x){
if(length(x)!= 3) {
res <- data.frame(
temp = "foo"
)
} else {
res <- lapply(x,function(y){
if(y$Found %in% c(1)) {
res <- data.frame(Filter(Negate(is.empty),y),stringsAsFactors = F)
} else {
res <- data.frame(
temp = "foo"
)
}
return(res)
}) %>% bind_rows(.id = "rows")
res <- pivot_wider(res,names_from = "rows",values_from = names(res)[-1])
}
return(res)
}) %>% bind_rows(.id = "rowsupper")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。