如何在R中拆分数据框(有例子)?

354 阅读3分钟

你可以使用以下三种方法之一,在R中把一个数据框分割成几个小的数据框。

方法1:根据行值手动分割数据框

#define first n rows to include in first data frame
n <- 4

#split data frame into two smaller data frames
df1 <- df[row.names(df) %in% 1:n, ]
df2 <- df[row.names(df) %in% (n+1):nrow(df), ]

方法2:将数据框分割成n个大小相等的数据框

#define number of data frames to split into
n <- 3

#split data frame into n equal-sized data frames
split(df, factor(sort(rank(row.names(df))%%n)))

方法3:基于列值分割数据框

#split data frame based on particular column value
df1 <- df[df$column_name == 0, ]
df2 <- df[df$column_name != 0, ]

下面的例子展示了如何在实践中使用每一种方法来处理下面的数据框架。

#create data frame
df <- data.frame(ID=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12),
                 sales=c(7, 8, 8, 7, 9, 7, 8, 9, 3, 3, 14, 10),
                 leads=c(0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0))

#view data frame
df

   ID sales leads
1   1     7     0
2   2     8     0
3   3     8     1
4   4     7     1
5   5     9     0
6   6     7     1
7   7     8     1
8   8     9     0
9   9     3     1
10 10     3     0
11 11    14     1
12 12    10     0

方法1:基于行值手动分割数据框

下面的代码显示了如何将一个数据框分割成两个较小的数据框,其中第一个数据框包含第1到4行,第二个数据框包含第5到最后一行。

#define row to split on
n <- 4

#split into two data frames
df1 <- df[row.names(df) %in% 1:n, ]
df2 <- df[row.names(df) %in% (n+1):nrow(df), ]

#view resulting data frames
df1

  ID sales leads
1  1     7     0
2  2     8     0
3  3     8     1
4  4     7     1

df2

   ID sales leads
5   5     9     0
6   6     7     1
7   7     8     1
8   8     9     0
9   9     3     1
10 10     3     0
11 11    14     1
12 12    10     0

方法2:将数据框分割成n个大小相等的数据框

下面的代码显示了如何将一个数据帧分割成n个大小相等的数据帧。

#define number of data frames to split into
n <- 3

#split data frame into n equal-sized data frames
split(df, factor(sort(rank(row.names(df))%%n)))

$`0`
  ID sales leads
1  1     7     0
2  2     8     0
3  3     8     1
4  4     7     1

$`1`
  ID sales leads
5  5     9     0
6  6     7     1
7  7     8     1
8  8     9     0

$`2`
   ID sales leads
9   9     3     1
10 10     3     0
11 11    14     1
12 12    10     0

其结果是三个大小相等的数据帧。

方法3:基于列值分割数据帧

下面的代码显示了如何根据一个特定列的值,将一个数据框分割成两个数据框。

#split data frame based on particular column value
df1 <- df[df$leads == 0, ]
df2 <- df[df$leads != 0, ]

#view resulting data frames
df1

   ID sales leads
1   1     7     0
2   2     8     0
5   5     9     0
8   8     9     0
10 10     3     0
12 12    10     0

df2

   ID sales leads
3   3     8     1
4   4     7     1
6   6     7     1
7   7     8     1
9   9     3     1
11 11    14     1

请注意,df1包含所有在原始数据框中'leads'等于0的行,df2包含所有在原始数据框中'leads'等于1的行。

其他资源

下面的教程解释了如何在R中执行其他常见的操作。

如何在R中合并多个数据框
如何在R中堆叠数据框的列
如何在R中基于其他列向数据框添加列

The postHow to Split a Data Frame in R (With Examples)appeared first onStatology.