按列拆分数据框

时间:2015-10-19 15:04:12

标签: 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的rowname信息,每个数据帧包含一列初始数据帧。这可能吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

这应该有效,保留行名称。它返回一个数据框列表:

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 ...

答案 1 :(得分:2)

您可以使用

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 ...

在这种情况下,我们只是分组。当您想要将行而不是列分成不同的组时,对于data.frames split()会更好。