【问题标题】:extracting rows with certain conditions in R在R中提取具有某些条件的行
【发布时间】:2014-03-06 21:22:44
【问题描述】:

我有一个数据框,其中包含名为“row”、“col”和“time”的列。 Row 的值从 A 到 H,Col 的值从 1 到 12。Time 的值是“5、10、15、20、25、30”。

所以我想制作不同的数据框或向量集,它们包含相同数量的行和列,但时间不同。所以最终会有 96 个不同的数据帧或向量集,它们具有匹配的行和列,但时间和活动的值不同。

以下是我的数据集示例。

     row col time activity day
1     A   1    5       33   1
2     B   1    5       36   1
3     C   1    5       53   1
4     D   1    5       40   1
5     E   1    5       91   1
6     F   1    5       80   1
7     G   1    5       89   1
8     H   1    5       82   1
97    A   1   10       38   1
98    B   1   10       92   1  
99    C   1   10       47   1
100   D   1   10       57   1
101   E   1   10       84   1
102   F   1   10       85   1
103   G   1   10       96   1

以下是我想要的示例……

     row col time activity day
1     A   1    5       33   1
2     A   1   10       38   1
3     A   1   15       66   1

等等等等

谢谢~

【问题讨论】:

  • 请查看一些有用的方法here 以及更详尽的here
  • @PauloCardoso,我不确定这些帖子是否解决了这里的问题,尽管我很可能误解了 OP。请参阅我的答案以了解我的解释。
  • 我认为here的讨论更相关;在这种情况下,hj14 只是询问 split-apply-combine 的拆分部分。但是,我怀疑这只是应用和组合的前奏,因此整个语料库都是相关的。如果没有,可以将相关部件拉出。
  • @BrodieG 是的。我误解了。你下面的方法可能就是被问到的。

标签: r dataframe row extract


【解决方案1】:

如果我理解正确,您希望将数据框拆分为子数据框,其中每个子数据框具有相同的 rowsCol 值。你可以通过split 做到这一点:

df.split <- with(df, split(df, list(rows, Col)))
head(df.split, 3) # showing 3 of 96 sub data frames

生产

$A.1
    rows Col time activity
1      A   1    5       26
97     A   1   10       91
193    A   1   15       25
289    A   1   20        2
385    A   1   25       95
481    A   1   30       35

$B.1
    rows Col time activity
2      B   1    5       64
98     B   1   10       71
194    B   1   15       72
290    B   1   20       45
386    B   1   25       52
482    B   1   30       43

$C.1
    rows Col time activity
3      C   1    5       49
99     C   1   10       27
195    C   1   15       35
291    C   1   20       16
387    C   1   25        9
483    C   1   30       94

这是我使用的玩具数据:

rows <- LETTERS[1:8]
Col <- 1:12
time <- (1:6) * 5  
df <- expand.grid(rows=rows, Col=Col, time=time)
df$activity <- sample(1:100, nrow(df), rep=T)

【讨论】:

  • 这很好用。谢谢你。我想知道如何用每个数据框的名称命名每个生成的图表。所以就像第一个名为“A.1”的图表和第二个名为“B.1”的图表等
  • @hj14,我不清楚您是否仍然想知道如何命名图表,或者是否已经为您解答。此外,如果这回答了您的原始问题,请考虑将其标记为已回答。谢谢。
  • @hj14,这将取决于您如何进行绘图。根据您在做什么,您可能根本不想拆分数据。您应该将其作为一个单独的问题提出。我还向您推荐dput 一个小版本的数据(可能只有 2 次、两行和两个列),以便人们更容易地提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多