将dataframe中的每列转换为单独的dataframe

将dataframe中的每列转换为单独的dataframe,r,dataframe,R,Dataframe,假设我有一个包含10列的数据帧,其中10列中的每一列表示一个单独的时间序列 我希望将每个timeseries(或数据帧的每列)存储在单独的数据帧中 我尝试过使用assign(“columnname”,df[,I]),其中I是for循环中的一个变量,从1到列数运行。这将导致每列的字符向量,而我需要数据帧 你知道我该怎么做吗 #创建测试数据帧 # Create a test dataframe df <- data.frame(c(1:3), c(3:5), c(8:10)) colnames

假设我有一个包含10列的数据帧,其中10列中的每一列表示一个单独的时间序列

我希望将每个timeseries(或数据帧的每列)存储在单独的数据帧中

我尝试过使用assign(“columnname”,df[,I]),其中I是for循环中的一个变量,从1到列数运行。这将导致每列的字符向量,而我需要数据帧

你知道我该怎么做吗

#创建测试数据帧
# Create a test dataframe
df <- data.frame(c(1:3), c(3:5), c(8:10))
colnames(df) <- c("col1","col2","col3")

#### VERSION 1 ####
# Creates a new dataframe from each column, but lose the original column names in the new dataframes
for(i in 1:ncol(df))
  {assign(colnames(df)[i], data.frame(df[,i]))}

#### VERSION 2 ####
# Creates a new dataframe from each column, maintains the original column names in the new dataframes
for(i in 1:ncol(df))
{temp <- data.frame(df[,i])
 colnames(temp) <- colnames(df)[i]
 assign(colnames(df)[i], temp)
 rm(temp)
}

df或者,如果OP愿意放弃
assign
(这几乎是普遍不鼓励的),那么就有
split.default(df,seq_沿途(df))
split.default(df,names(df))
split.default绝对是一个很好的选择。请记住,当您将分割分配给新对象时,实际上是
x[[“col2”]]
,对吗
x[“col2”]
将是列表的一个子集,而不是列表的一个元素。很好,Frank,你说得对,对于dataframe对象,它将是
x[“col2”]