我需要帮助以列出R中的数据帧列表

问题描述 投票:0回答:2

我读取了数据框,并将其存储在变量中。然后,我创建了一个空列表。我创建了一个循环,该循环遍历各列,并通过select()函数创建数据框,并将其分配给列表中的下一个位置。但是,事实并非如此,只有列存储在列表中。

这是我的代码:

library(tidyverse)

data = read_csv('hubbard_data.csv')
columns = colnames(data)
#make date and time correct
data$TIMESTAMP_START = strptime(data$TIMESTAMP_START,"%Y%m%d%H%M")
data$TIMESTAMP_END = strptime(data$TIMESTAMP_END,"%Y%m%d%H%M")
dfs = list() #List of data frames
it = 1 #Iterator
while(it <= length(columns)){
      dfs[it] <- data %>% select(columns[it],LE)
      it = it + 1
 }

我做了进一步的分析,发现了这一点:

temp1 <- data %>% select(columns[1],LE)

dfs[1] <- data %>% select(columns[1],LE)

temp1是一个数据帧,但dfs[1]不是。为什么?

r list dataframe error-handling tidyverse
2个回答
1
投票

您可以通过执行以下操作将数据帧分为单列数据帧列表:

my_list <- lapply(as.list(data), as.data.frame)

如果要将原始数据框中的LE列添加到列表中的所有数据框中,则可以执行

my_list <- lapply(my_list, function(x) { x$LE <- data$LE; return(x) })

0
投票

这是执行此操作的一种方法:

library(data.table)
dat <- as.data.table(mtcars)
mylist <- lapply(colnames(dat), function(z){
  return_table <- dat[, .(get(z))]
  names(return_table) <- z
  return(return_table)
  })

检查输出:

> str(mylist[[1]])
Classes ‘data.table’ and 'data.frame':  32 obs. of  1 variable:
 $ mpg: num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 - attr(*, ".internal.selfref")=<externalptr> 
> str(mylist[[5]])
Classes ‘data.table’ and 'data.frame':  32 obs. of  1 variable:
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 - attr(*, ".internal.selfref")=<externalptr> 

如果要多于一列(例如,mpg必须始终存在),则可以如下所示更改以下两行:

  return_table <- dat[, .(mpg, get(z))]
  names(return_table) <- c('mpg', z)

具有此更改的输出:

> str(mylist[[5]])
Classes ‘data.table’ and 'data.frame':  32 obs. of  2 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 - attr(*, ".internal.selfref")=<externalptr> 
© www.soinside.com 2019 - 2024. All rights reserved.