R 按列拆分数据帧

R 按列拆分数据帧,r,R,我想按列拆分数据帧。听起来微不足道,但到目前为止我还没有真正成功。 以下是我的想法: SG <- data.frame(num = 1:26, let = letters, LET = LETTERS) SG <- lapply(SG, function(x) split(x, colnames(SG))) str(SG) List of 3 $ num:List of 3 $ let:List of 3 $ LET:List of 3 SG您可以使用 lapply(col

我想按列拆分数据帧。听起来微不足道,但到目前为止我还没有真正成功。 以下是我的想法:

SG <- data.frame(num = 1:26, let = letters, LET = LETTERS)
SG <- lapply(SG, function(x) split(x, colnames(SG)))
str(SG)

List of 3
 $ num:List of 3
 $ let:List of 3
 $ LET:List of 3
SG您可以使用

lapply(colnames(SG), function(x) SG[,x,drop=F])
它返回一个具有结构的对象

List of 3
 $ :'data.frame':   26 obs. of  1 variable:
  ..$ num: int [1:26] 1 2 3 4 5 6 7 8 9 10 ...
 $ :'data.frame':   26 obs. of  1 variable:
  ..$ let: Factor w/ 26 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ :'data.frame':   26 obs. of  1 variable:
  ..$ LET: Factor w/ 26 levels "A","B","C","D",..: 1 2 3 4 5 6 7 8 9 10 ...
在这种情况下,我们只是子集
split()
对于data.frames,当您希望将行而不是列分隔为不同的组时,效果更好。

您可以使用

lapply(colnames(SG), function(x) SG[,x,drop=F])
它返回一个具有结构的对象

List of 3
 $ :'data.frame':   26 obs. of  1 variable:
  ..$ num: int [1:26] 1 2 3 4 5 6 7 8 9 10 ...
 $ :'data.frame':   26 obs. of  1 variable:
  ..$ let: Factor w/ 26 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ :'data.frame':   26 obs. of  1 variable:
  ..$ LET: Factor w/ 26 levels "A","B","C","D",..: 1 2 3 4 5 6 7 8 9 10 ...

在这种情况下,我们只是子集
split()
对于data.frames,当您希望将行而不是列分隔为不同的组时,效果更好。

这应该可以,行名称会保留。它返回数据帧列表:

SG <- lapply(SG, data.frame)

str(SG)
List of 3
 $ num:'data.frame':    26 obs. of  1 variable:
  ..$ X..i..: int [1:26] 1 2 3 4 5 6 7 8 9 10 ...
 $ let:'data.frame':    26 obs. of  1 variable:
  ..$ X..i..: Factor w/ 26 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ LET:'data.frame':    26 obs. of  1 variable:
  ..$ X..i..: Factor w/ 26 levels "A","B","C","D",..: 1 2 3 4 5 6 7 8 9 10 ...

SG这应该有效,行名称被保留。它返回数据帧列表:

SG <- lapply(SG, data.frame)

str(SG)
List of 3
 $ num:'data.frame':    26 obs. of  1 variable:
  ..$ X..i..: int [1:26] 1 2 3 4 5 6 7 8 9 10 ...
 $ let:'data.frame':    26 obs. of  1 variable:
  ..$ X..i..: Factor w/ 26 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ LET:'data.frame':    26 obs. of  1 variable:
  ..$ X..i..: Factor w/ 26 levels "A","B","C","D",..: 1 2 3 4 5 6 7 8 9 10 ...

SG您希望的输出是什么?一列三个数据帧的列表?是的,完全正确。我想要一个数据帧列表,每个数据帧包含原始数据帧的一列,这样我可以在以后执行“list2env”您想要的输出是什么?一列三个数据帧的列表?是的,完全正确。我想要一个数据帧列表,每个数据帧包含原始数据帧的一列,这样我以后可以执行“list2env”谢谢!很简单,但是,colname没有被保留。不客气。这将检索(i in 1:length(SG))colnames(SG[[i]])的colnames:
,谢谢!很简单,但是,colname没有被保留。不客气。这将检索(i in 1:length(SG))colnames(SG[[i]])的colnames:
,谢谢!出于某些原因,list2env(SG,envir=.GlobalEnv)不在这里工作?谢谢!出于某些原因,list2env(SG,envir=.GlobalEnv)不在这里工作?