15

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

  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

...

实际数据有数百行。我想将 A 拆分为 C 和 D。我在网上查找并找到了几种解决方案,但不适用于我的情况。

如何拆分数据框?

例如:案例一:

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

我不想被任意数字分割

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

data2 <- data[data$sum_points == 2500, ]

我也不想被一个因素分开。有时我想将许多级别组合在一起。

案例3:按行号选择

newdf <- mydf[1:3,]

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

4

3 回答 3

9

听起来你想要两个数据框,一个(A,B,C)在其中,一个只有D. 在那种情况下,你可以做

Data1 <- subset(Data, group %in% c("A","B","C"))
Data2 <- subset(Data, group=="D")

如果您要问不同的问题,请纠正我

于 2012-10-29T16:41:57.133 回答
8

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

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

split(x, sort(as.numeric(rownames(x))))

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

于 2019-03-11T09:43:52.907 回答
0

您可以考虑使用recode()“car”包中的功能。

# Load the library and make up some sample data
library(car)
set.seed(1)
dat <- data.frame(Row = 1:100,
                  Conc = runif(100, 0, 10),
                  group = sample(LETTERS[1:10], 100, replace = TRUE))

目前,dat$group包含大写字母 A 到 J。假设我们需要以下四个组:

  • “一” = A、B、C
  • “二” = D、E、J
  • “三”= F,我
  • “四” = G, H

现在,使用recode()(注意分号和嵌套引号)。

recodes <- recode(dat$group, 
                 'c("A", "B", "C") = "one"; 
                  c("D", "E", "J") = "two"; 
                  c("F", "I") = "three"; 
                  c("G", "H") = "four"')
split(dat, recodes)
于 2012-10-29T17:17:11.637 回答