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に分割したいと思います。ウェブを調べていくつかの解決策を見つけましたが、私の場合には当てはまりません。

データフレームを分割する方法は?

例:ケース1:

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

2つのデータフレームが必要なようです。1つは(A,B,C)その中にあり、もう1つはちょうどDです。その場合、あなたはすることができます

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

あなたが何か違うことを求めていたら私を訂正してください

于 2012-10-29T16:41:57.133 に答える
8

For those who end up here through internet search engines time after time, the answer to the question in the title is:

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

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

Assuming that your data frame has numerically ordered row names. Also split(x, rownames(x)) works, but the result is rearranged.

于 2019-03-11T09:43:52.907 に答える
0

recode()「車」パッケージの関数の使用を検討してください。

# 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が含まれています。次の4つのグループが必要だと想像してください。

  • 「1つ」=A、B、C
  • 「2」=D、E、J
  • 「3」=F、I
  • 「4」=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 に答える