【问题标题】:Subsetting a dataframe in R including observations that satisfy condition对 R 中的数据框进行子集化,包括满足条件的观察结果
【发布时间】:2016-04-20 15:54:26
【问题描述】:

我想随机子集数据帧,条件是如果 alpha=1 的观察包含在子集中,那么所有 alpha=1 的观察必须包含在子集中。我简化了数据,所以看起来像这样。

 df
 alpha beta gamma
 1    5     2
 1    6     3
 1    5     3
 2    3     2
 2    5     9
 2    2     6
 3    3     4
 3    4     7
 3    3     8
 4    3     4
 4    8     3
 4    4     9
 5    9     8
 5    5     5
 5    3     5

我应该使用什么命令来获取如下子集?

 df1
 alpha beta gamma
 1    5     2
 1    6     3
 1    5     3
 3    3     4
 3    4     7
 3    3     8
 5    9     8
 5    5     5
 5    3     5

 df2
 alpha beta gamma
 2    3     2
 2    5     9
 2    2     6
 4    3     4
 4    8     3
 4    4     9
 5    9     8
 5    5     5
 5    3     5

 df3
 alpha beta gamma
 1    5     2
 1    6     3
 1    5     3
 2    3     2
 2    5     9
 2    2     6
 5    9     8
 5    5     5
 5    3     5

具体来说,df 中带有数字 (1,5,2) 的第一个观察值随机落在子集 df1 和 df3 中。如果是这样,则必须遵循 df (1,6,3) 和 (1,5,3) 中的 2nd 和 3d 观测值也包含在子集 df1 和 df2 中。

我希望我的问题很清楚。请帮忙。

【问题讨论】:

  • 您需要澄清子集标准,因为它不是很清楚。
  • 标准是如果 alpha =1 的观察包含在子集中,那么所有 aplha =1 的观察也必须包含在子集中。如果 alpha =4 的观测值包含在子集中,则所有 aplha =4 的观测也必须包含在子集中,以此类推。

标签: r dataframe subset


【解决方案1】:

试试这个

str <- "alpha,beta,gamma
1,5,2
1,6,3
1,5,3
2,3,2
2,5,9
2,2,6
3,3,4
3,4,7
3,3,8
4,3,4
4,8,3
4,4,9
5,9,8
5,5,5
5,3,5"

df <- read.csv(textConnection(str))

df[df$alpha %in% sample(unique(df$alpha), 3), ]

输出

   alpha beta gamma
4      2    3     2
5      2    5     9
6      2    2     6
10     4    3     4
11     4    8     3
12     4    4     9
13     5    9     8
14     5    5     5
15     5    3     5

【讨论】:

  • 不幸的是,它不起作用。 R 说:“sample.int(length(x), size, replace, prob) 中的错误:第一个参数无效”
  • 我的工作非常适合我,所以你和我的数据之间肯定存在差异。您可以将dput(df) 的输出添加到您的问题中吗?
  • 对不起,我的错。真的行。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
相关资源
最近更新 更多