繁体   English   中英

R - 将 Data.frame 元素转换为单列 tibble()

[英]R - Transform Data.frame elements into a single column tibble()

我正在寻找一种方法来改进我的代码并摆脱 R 中的循环。

背景:

我有一个 Data.frames 列表。 每个 Data.frame 有 4 个元素 - 其中许多是 NULL。 我需要保留 NULL 并用 NA 替换它们,因为我征募/展平列表,然后将其作为列添加到“tibble”。 我知道如果我使用map(list, n)访问元素map(list, n)它将为我提供循环的起点。 如果我flatten()这会删除 NULL 对象,我将无法将它添加到我正在使用的另一个 tibble 中,因为订单没有保留。

输入结构如下:

[[1]]
  item1 item2 item3 item4
1  aaaa  bbbb  cccc  dddd

[[2]]
data frame with 0 columns and 0 rows

[[3]]
data frame with 0 columns and 0 rows

[[4]]
  item1 item2 item3 item4
1  ffff  gggg  hhhh  kkkk

到目前为止的解决方案:

我写了以下循环:

element_tibble = tibble()

for (i in 1:length(list_of_dfs)){
    element = list_of_dfs[[i]]
    if (is.null(element) == TRUE) {
        element = NA
        }
    else {
        element = element
        }
    row = c(element = element)
    element_tibble = rbind(element_tibble, row)
}

预期的输出是一列小标题,它是列表的长度,为原始列表中的 NULL 元素保留NA

# A tibble: n x 1
  element
  <chr>  
1 item2  
2 NA       
3 NA     
4 item2 
etc 

我知道循环很慢,但我找不到另一种方法来访问 Data.frame 中的元素,然后将其转换为一个可用的(平面)列,以作为每个观察的另一个元素添加到 tibble 中。

任何建议将不胜感激。

谢谢

詹姆士

使用sapply基础 R 选项 -

df <- data.frame(item1 = 'aaaa', item2 = 'bbbb', item3 = 'ccc', item4 = 'ddd')
list_of_dfs <- list(df, data.frame(), df)

result <- data.frame(element = sapply(list_of_dfs, function(x) 
                               if(nrow(x)) x[[2]] else NA))
result

#  element
#1    bbbb
#2    <NA>
#3    bbbb

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM