r - 将多个数据框列转换为单独的列表元素

标签 r

假设我有一个未命名的列表,其中每个元素都是一个包含一列或多列的数据框。对于一些列表元素(那些 convTRUE ),我想把每一列变成一个单独的列表元素(所以一个只有一列的数据框)。一个例子:

x <- list(data.frame(a=c(1,3,4)),
          data.frame(v=c("B","C","A"), w=c(12,14,17), h=c(1,2,3)),
          data.frame(m=c(2.2,4.1,5.0)),
          data.frame(h=c(4,1,2), u=c(9,7,2)))
conv <- c(FALSE, TRUE, FALSE, FALSE)
x

由此,我想去:
x <- list(x[[1]], x[[2]][1], x[[2]][2], x[[2]][3], x[[3]], x[[4]])
x

我可以用笨拙的循环来做到这一点,但想要更有效的东西。另外,我更喜欢坚持 base 的解决方案包功能。

最佳答案

我相信这可以满足您的需求(注意,感谢@DavidArenburg 使用 [ 拉出列):

unlist(recursive=FALSE, 
  mapply(
    function(item, exp) if(exp) lapply(seq(item), function(x) item[x]) else list(item),
    x,
    conv
) )

这是str输出:
List of 6
 $ :'data.frame': 3 obs. of  1 variable:
  ..$ a: num [1:3] 1 3 4
 $ :'data.frame': 3 obs. of  1 variable:
  ..$ v: Factor w/ 3 levels "A","B","C": 2 3 1
 $ :'data.frame': 3 obs. of  1 variable:
  ..$ w: num [1:3] 12 14 17
 $ :'data.frame': 3 obs. of  1 variable:
  ..$ h: num [1:3] 1 2 3
 $ :'data.frame': 3 obs. of  1 variable:
  ..$ m: num [1:3] 2.2 4.1 5
 $ :'data.frame': 3 obs. of  2 variables:
  ..$ h: num [1:3] 4 1 2
  ..$ u: num [1:3] 9 7 2

关于r - 将多个数据框列转换为单独的列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28886500/

相关文章:

r - 如何让 xtabs 计算 R 中的均值而不是总和?

r - 加速 R 中的稀疏矩阵乘法

使用 ISO-8859-13 编码的 R read.csv

R sqldf - match.fun(asfn) 'c("as.labelled", "as.integer")' 不是函数、字符或符号

r - 在 apply 内使用 ifelse

r - 如何通过 shell 从父目录获取 R 文件?

r - 如何用R计算组标签的排列?

R - 在 ggplot2 (geom_col) 中更改形状图例

r - 到假期的天数

R:像 %in% 这样的操作符叫什么,我如何了解它们?