【问题标题】:R: Looping through list of dataframes in a vectorR:循环遍历向量中的数据帧列表
【发布时间】:2015-08-15 03:45:32
【问题描述】:

我有一个数据集,我只想一次遍历数据框中的某些列来创建图表。我的数据框的结构由我从较大的数据集中解析成包含多个数据框的向量的数据组成。

我想从向量中的一个数据框中调用一列。我想循环数据框来调用每一列。

请看下面的例子:

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

我该怎么做?

【问题讨论】:

  • 首先,您有一个由数据帧组成的列表——而不是向量。此外,列表中的所有数据框都应具有相同的列名。
  • 您想合并 d1 和 d2 的列吗?还是尝试从每个数据帧中提取列的子集?
  • 只想提取列的子集
  • 感谢您的澄清。您想将子集组合成单个向量还是单个数据框?或者您是在调用多个图表 - 每个数据框一个
  • 我正在调用多个图表 - 每个数据框一个

标签: r


【解决方案1】:

您可以使用lapply 绘制列表中的每个单独的数据框。例如,

d1 <- data.frame(y1=c(1,2,3),y2=c(4,5,6),y3=c(7,8,9))
d2 <- data.frame(y1=c(3,2,1),y2=c(6,5,4),y3=c(11,12,13))
mylist <- list(d1, d2)

par(mfrow=c(2,1))

# lapply on a subset of columns
lapply(mylist, function(x) plot(x$y2, x$y3))

【讨论】:

    【解决方案2】:

    您不需要 for 循环来获取他们的数据点。您可以通过列名来调用列。

    # a toy dataframe
    d <- data.frame(A = 1:20, B = sample(c(FALSE, TRUE), 20, replace = TRUE),
                C = LETTERS[1:20], D = rnorm(20, 0, 1))
    col_names <- c("A", "B", "D") # names of columns I want to get
    d[,col_names] # returns a dataset with the values of the columns you want
    

    【讨论】:

      【解决方案3】:

      这是使用 for 循环解决问题的方法:

      # a toy dataframe
      mylist <- list(dat1 = data.frame(A = 1:20, B = LETTERS[1:20]),
                 dat2 = data.frame(A = 21:40, B = LETTERS[1:20]),
                 dat3 = data.frame(A = 41:60, B = LETTERS[1:20]))
      col_names <- c("A") # name of columns I want to get
      for (i in 1:length(mylist)){
          # you can do whatever you want with what is returned;
          # here I am just print them out
          print(names(mylist)[i]) # name of the data frame
          print(mylist[[i]][,col_names]) # values in Column A 
      }
      

      【讨论】:

        【解决方案4】:

        我认为对您的问题最简单的答案是使用双括号。

        for (i in 1:length(my.list)) {
        
        print(my.list[[i]]$column)
        
        }
        

        假设您的数据框列表中的所有列都具有相同的名称,则该方法有效。如果需要,您还可以调用数据框中列的位置。

        是的,lapply 可以更优雅,但在某些情况下,for 循环更有意义。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-22
          • 2017-12-14
          • 1970-01-01
          • 2021-12-25
          • 1970-01-01
          相关资源
          最近更新 更多