为了账号安全,请及时绑定邮箱和手机立即绑定

如何制作数据框列表?

如何制作数据框列表?

当年话下 2019-05-22 13:31:42
如何制作数据框列表?如何制作数据框列表以及如何从列表中访问每个数据框?例如,如何将这些数据框放在列表中?d1 <- data.frame(y1 = c(1, 2, 3),                 y2 = c(4, 5, 6))d2 <- data.frame(y1 = c(3, 2, 1),                 y2 = c(6, 5, 4))
查看完整描述

4 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

这与您的问题无关,但您想要使用=而不是<-在函数调用中。如果您使用<-,您将最终创建变量,y1并y2在您正在使用的任何环境中:


d1 <- data.frame(y1 <- c(1, 2, 3), y2 <- c(4, 5, 6))

y1

# [1] 1 2 3

y2

# [1] 4 5 6

这不会产生在数据框中创建列名的看似期望的效果:


d1

#   y1....c.1..2..3. y2....c.4..5..6.

# 1                1                4

# 2                2                5

# 3                3                6

该=运营商,在另一方面,将您的向量与参数相关联data.frame。


至于您的问题,制作数据框列表很容易:


d1 <- data.frame(y1 = c(1, 2, 3), y2 = c(4, 5, 6))

d2 <- data.frame(y1 = c(3, 2, 1), y2 = c(6, 5, 4))

my.list <- list(d1, d2)

您可以像访问任何其他列表元素一样访问数据框:


my.list[[1]]

#   y1 y2

# 1  1  4

# 2  2  5

# 3  3  6


查看完整回答
反对 回复 2019-05-22
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

您也可以访问特定的列和值在每个列表元素与  [和[[。这里有几个例子。首先,我们只能访问列表中每个数据框的第一列lapply(ldf, "[", 1),其中1表示列号。


ldf <- list(d1 = d1, d2 = d2)  ## create a named list of your data frames

lapply(ldf, "[", 1)

# $d1

#   y1

# 1  1

# 2  2

# 3  3

#

# $d2

#   y1

# 1  3

# 2  2

# 3  1

同样,我们可以访问第二列中的第一个值


lapply(ldf, "[", 1, 2)

# $d1

# [1] 4

# $d2

# [1] 6

然后我们也可以直接访问列值,作为向量,用 [[


lapply(ldf, "[[", 1)

# $d1

# [1] 1 2 3

#

# $d2

# [1] 3 2 1


查看完整回答
反对 回复 2019-05-22
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

如果您有大量按顺序命名的数据框,则可以创建所需数据框子集的列表,如下所示:


d1 <- data.frame(y1=c(1,2,3), y2=c(4,5,6))

d2 <- data.frame(y1=c(3,2,1), y2=c(6,5,4))

d3 <- data.frame(y1=c(6,5,4), y2=c(3,2,1))

d4 <- data.frame(y1=c(9,9,9), y2=c(8,8,8))


my.list <- list(d1, d2, d3, d4)

my.list


my.list2 <- lapply(paste('d', seq(2,4,1), sep=''), get)

my.list2

where my.list2返回包含第2,第3和第4个数据帧的列表。


[[1]]

  y1 y2

1  3  6

2  2  5

3  1  4


[[2]]

  y1 y2

1  6  3

2  5  2

3  4  1


[[3]]

  y1 y2

1  9  8

2  9  8

3  9  8

但请注意,上面列表中的数据框不再被命名。如果要创建包含数据框子集的列表并希望保留其名称,可以尝试以下操作:


list.function <-  function() { 


     d1 <- data.frame(y1=c(1,2,3), y2=c(4,5,6))

     d2 <- data.frame(y1=c(3,2,1), y2=c(6,5,4))

     d3 <- data.frame(y1=c(6,5,4), y2=c(3,2,1))

     d4 <- data.frame(y1=c(9,9,9), y2=c(8,8,8))


     sapply(paste('d', seq(2,4,1), sep=''), get, environment(), simplify = FALSE) 


my.list3 <- list.function()

my.list3

返回:


> my.list3

$d2

  y1 y2

1  3  6

2  2  5

3  1  4


$d3

  y1 y2

1  6  3

2  5  2

3  4  1


$d4

  y1 y2

1  9  8

2  9  8

3  9  8


> str(my.list3)

List of 3

 $ d2:'data.frame':     3 obs. of  2 variables:

  ..$ y1: num [1:3] 3 2 1

  ..$ y2: num [1:3] 6 5 4

 $ d3:'data.frame':     3 obs. of  2 variables:

  ..$ y1: num [1:3] 6 5 4

  ..$ y2: num [1:3] 3 2 1

 $ d4:'data.frame':     3 obs. of  2 variables:

  ..$ y1: num [1:3] 9 9 9

  ..$ y2: num [1:3] 8 8 8


> my.list3[[1]]

  y1 y2

1  3  6

2  2  5

3  1  4


> my.list3$d4

  y1 y2

1  9  8

2  9  8

3  9  8


查看完整回答
反对 回复 2019-05-22
  • 4 回答
  • 0 关注
  • 782 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信