逐行拆分数据帧

Ama*_*eur 6 r

我有一个像这样的长数据帧:

  Row  Conc   group
  1     2.5    A
  2     3.0    A
  3     4.6    B
  4     5.0    B
  5     3.2    C
  6     4.2    C
  7     5.3    D
  8     3.4    D
Run Code Online (Sandbox Code Playgroud)

...

实际数据有数百行.我想将A分为C和D.我查阅了网页,找到了几个解决方案,但不适用于我的情况.

如何拆分数据框?

例如:案例1:

x = data.frame(num = 1:26, let = letters, LET = LETTERS)
set.seed(10)
split(x, sample(rep(1:2, 13)))
Run Code Online (Sandbox Code Playgroud)

我不想以任意数字分割

案例2:按级别/因子拆分

data2 <- data[data$sum_points == 2500, ]
Run Code Online (Sandbox Code Playgroud)

我也不想分开一个因素.有时我想将多个层次结合在一起.

案例3:按行号选择

newdf <- mydf[1:3,]
Run Code Online (Sandbox Code Playgroud)

实际数据有数百行.我不知道行号.我只知道我想分开的级别.

Señ*_*r O 5

听起来好像您想要两个数据帧,其中一个包含(A,B,C)其中,一个仅包含其中D。在这种情况下,您可以

Data1 <- subset(Data, group %in% c("A","B","C"))
Data2 <- subset(Data, group=="D")
Run Code Online (Sandbox Code Playgroud)

如果您有其他疑问,请纠正我

  • 我认为也许`split(dat,dat $ group =='D')`就足够了。 (9认同)
  • 它(达到某种程度)可以达到相同的结果,但是更加习惯用法,只占用一行,并且方便地在单个数据结构中返回两个片段。通常,应该更喜欢使用`split`。 (4认同)

Mik*_*kko 5

对于那些一次又一次通过互联网搜索引擎来到这里的人来说,标题中问题的答案是:

x <- data.frame(num = 1:26, let = letters, LET = LETTERS)

split(x, sort(as.numeric(rownames(x))))
Run Code Online (Sandbox Code Playgroud)

假设您的数据框具有按数字顺序排列的行名称。也split(x, rownames(x))有效,但结果被重新排列。