在R中,使用具有特定特征的行创建新数据帧

时间:2014-03-07 16:45:11

标签: r

我正在玩March Madness的一些数据,我正在尝试在R中创建新的数据帧,将所有“AP”分成一个数据帧,将所有“DUN”分成不同的帧。这是一个巨大的数据集,但这是一个片段,说明我要做什么,我只是无法在R中弄清楚任何帮助将不胜感激。

H,37,AP,662,18
H,37,AP,783,19
H,37,AP,636,20
H,37,AP,671,21
H,37,AP,708,22
H,37,AP,562,23
H,37,AP,675,24
H,37,AP,554,25
H,37,DUN,625,1
H,37,DUN,717,2
H,37,DUN,577,3
H,37,DUN,511,4
H,37,DUN,676,5

如果有人可以告诉我如何使用此功能删除基于某列的某些行(请从第4列删除所有625秒),

点数。

提前致谢。

2 个答案:

答案 0 :(得分:0)

您可以使用split()为每个因素创建数据框列表:

split(df, by = factor(df$AP_or_DUN))

要根据特定值(例如num)删除特定值,例如i,您可以使用[进行子集化:

df <- df[df[, i] != num, ]

或者,如果列有名称:

df <- df[df$column_of_values != num, ]

答案 1 :(得分:0)

另一种方法是使用dlply包中的plyr。它会在数据框列表中返回您的数据,但如果您想将它们保持在一起,则可能有所帮助。

dat <- colA colB colC colD colE
          H   37   AP  675   24
          H   37   AP  554   25
          H   37  DUN  625    1
          H   37  DUN  717   25

dat2 <- dlply(dat, .(colC))

$AP
  colA colB colC colD colE
1    H   37   AP  675   24
2    H   37   AP  554   25

$DUN
  colA colB colC colD colE
1    H   37  DUN  625    1
2    H   37  DUN  717    2

for (i in 1:length(dat2)) 
  assign(names(dat2)[i], dat2[[i]])