标签: subset

从集合中选择随机子集的最佳方法?

我在Vector中有一组对象,我想从中选择一个随机子集(例如100个项目返回;随机选择5个).在我的第一次(非常草率)传球中,我做了一个非常简单且可能过于聪明的解决方案:

Vector itemsVector = getItems();

Collections.shuffle(itemsVector);
itemsVector.setSize(5);
Run Code Online (Sandbox Code Playgroud)

虽然这样做的好处很简单,但我怀疑它不能很好地扩展,即Collections.shuffle()必须至少为O(n).我不太聪明的选择是

Vector itemsVector = getItems();

Random rand = new Random(System.currentTimeMillis()); // would make this static to the class    

List subsetList = new ArrayList(5);
for (int i = 0; i < 5; i++) {
     // be sure to use Vector.remove() or you may get the same item twice
     subsetList.add(itemsVector.remove(rand.nextInt(itemsVector.size())));
}
Run Code Online (Sandbox Code Playgroud)

有关更好地从集合中抽取随机子集的方法的任何建议吗?

java random algorithm collections subset

66
推荐指数
3
解决办法
3万
查看次数

在对数据帧进行子集化时选择未定义的列

我有一个数据框,str(data)以显示有关我的数据框的更多信息,结果如下:

> str(data)
'data.frame':   153 obs. of  6 variables:
$ Ozone  : int  41 36 12 18 NA 28 23 19 8 NA ...
$ Solar.R: int  190 118 149 313 NA NA 299 99 19 194 ...
$ Wind   : num  7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
$ Temp   : int  67 72 74 62 56 66 65 59 61 69 ...
$ Month  : int  5 5 5 5 5 5 …
Run Code Online (Sandbox Code Playgroud)

r subset dataframe

65
推荐指数
1
解决办法
19万
查看次数

如何根据涉及字段的条件提取数据帧的子集?

我有一个大型CSV,其中包含来自不同位置的医疗调查结果(位置是数据中存在的因素).由于某些分析特定​​于某个位置并且为了方便起见,我想仅从这些位置提取具有行的子帧.碰巧该位置是第一个字段所以是的,我可以通过对CSV行进行排序来实现,但我想学习如何在R中进行操作,因为我确信我需要将其用于其他列.

所以,简而言之,问题是:给定一个数据框foo,如何创建另一个数据框条,它只包含来自foo的行foo $ location ='there'?

非常感谢.

r subset dataframe r-faq

59
推荐指数
2
解决办法
19万
查看次数

根据向量中的值从数据框中选择行

我有类似这样的数据:

dt <- structure(list(fct = structure(c(1L, 2L, 3L, 4L, 3L, 4L, 1L, 2L, 3L, 1L, 2L, 3L, 2L, 3L, 4L), .Label = c("a", "b", "c", "d"), class = "factor"), X = c(2L, 4L, 3L, 2L, 5L, 4L, 7L, 2L, 9L, 1L, 4L, 2L, 5L, 4L, 2L)), .Names = c("fct", "X"), class = "data.frame", row.names = c(NA, -15L))
Run Code Online (Sandbox Code Playgroud)

我想根据fct变量中的值从这个数据框中选择行.例如,如果我希望选择包含"a"或"c"的行,我可以这样做:

dt[dt$fct == 'a' | dt$fct == 'c', ]
Run Code Online (Sandbox Code Playgroud)

产量

1    a 2
3    c 3
5    c 5
7    a …
Run Code Online (Sandbox Code Playgroud)

r subset r-faq

59
推荐指数
3
解决办法
17万
查看次数

子集化Python DataFrame

我正在从R转换到Python.我刚刚开始使用熊猫.我有一个R代码很好地子集:

k1 <- subset(data, Product = p.id & Month < mn & Year == yr, select = c(Time, Product))
Run Code Online (Sandbox Code Playgroud)

现在,我想在Python中做类似的事情.这是我到目前为止所得到的:

import pandas as pd
data = pd.read_csv("../data/monthly_prod_sales.csv")


#first, index the dataset by Product. And, get all that matches a given 'p.id' and time.
 data.set_index('Product')
 k = data.ix[[p.id, 'Time']]

# then, index this subset with Time and do more subsetting..
Run Code Online (Sandbox Code Playgroud)

我开始觉得我这样做是错误的.或许,有一个优雅的解决方案.有人可以帮忙吗?我需要从我的时间戳中提取月份和年份并进行子集化.也许有一个单行程将完成所有这些:

k1 <- subset(data, Product = p.id & Time >= start_time & Time < end_time, select = c(Time, Product))
Run Code Online (Sandbox Code Playgroud)

谢谢.

python subset pandas

56
推荐指数
3
解决办法
15万
查看次数

R不在子集中

可能重复:
从数据框中删除多个元素的标准方法

我知道在R中,如果你正在搜索另一个组的子集或基于id的匹配,你会使用类似的东西

subset(df1, df1$id %in% idNums1)
Run Code Online (Sandbox Code Playgroud)

我的问题是如何做相反的事情或选择不匹配ids矢量的项目.

我尝试使用!但收到错误消息

subset(df1, df1$id !%in% idNums1)
Run Code Online (Sandbox Code Playgroud)

我认为我的备份是这样做的:

matches <- subset(df1, df1$id %in% idNums1)
nonMatches <- df1[(-matches[,1]),]
Run Code Online (Sandbox Code Playgroud)

但我希望有一些更高效的东西.

r subset

54
推荐指数
1
解决办法
10万
查看次数

子集和ggplot2

我有一个问题是使用ggplot2绘制数据框的子集.我的df就像:

ID Value1 Value2
P1 100 12
P1 120 13
...
P2 300 11
P2 400 16
...
P3 130 15
P3 140 12
...
Run Code Online (Sandbox Code Playgroud)

我现在如何仅为ID P1和P3绘制Value1与Value2的关系?例如我试过:

ggplot(subset(df,ID=="P1 & P3") + geom_line(aes(Value1, Value2, group=ID, colour=ID)))
Run Code Online (Sandbox Code Playgroud)

但我总是收到一个错误.

ps我也试过很多与P1和P3的组合,但我总是失败..

r subset ggplot2

53
推荐指数
5
解决办法
11万
查看次数

子集R数据帧导致神秘的NA行

我一直在遇到我认为的错误.这不是什么大问题,但我很好奇是否有其他人看过这个.不幸的是,我的数据是保密的,所以我必须要弥补的例子,它不会是非常有益的.

当子集化我的数据,我偶尔得到不在我的原始数据帧神秘NA行.甚至rownames都是NA.例如:

example <- data.frame("var1"=c("A", "B", "A"), "var2"=c("X", "Y", "Z"))
example

  var1 var2
1    A    X
2    B    Y
3    A    Z
Run Code Online (Sandbox Code Playgroud)

然后我跑:

example[example$var1=="A",]

  var1 var2
1    A    X
3    A    Z
NA<NA> <NA>
Run Code Online (Sandbox Code Playgroud)

当然,上面的例子实际上并没有给你这个神秘的NA行; 我在这里添加它来说明我对数据的问题.

也许这与我使用Google的read.xlsx包导入我的原始数据集然后在子集化之前执行从长到长的重塑这一事实有关.

谢谢

r subset reshape na

49
推荐指数
5
解决办法
3万
查看次数

在另一个时间范围内返回数据子集时间范围?

有非常好的方法来xts对象进行子集化.例如,可以获取所有年,月,日的所有数据,但严格地在上午9:30到下午4点之间执行:

my_xts["T09:30/T16:00"]
Run Code Online (Sandbox Code Playgroud)

或者您可以通过以下方式获得两个日期之间的所有观察:

my_xts["2012-01-01/2012-03-31"]
Run Code Online (Sandbox Code Playgroud)

或者在某个特定日期之前/之后的所有日期:

my_xts["/2011"]  # from start of data until end of 2011
my_xts["2011/"]  # from 2011 until the end of the data
Run Code Online (Sandbox Code Playgroud)

如何获取所有年份的特定月份或所有月份和年份的特定日期的所有数据?是否存在任何其他子集技巧?

r time-series subset xts

48
推荐指数
2
解决办法
4万
查看次数

子集数据仅包含名称与条件匹配的列

有没有办法让我根据以特定字符串开头的列名来对数据进行子集化?我有一些相似的列,ABC_1 ABC_2 ABC_3有些像XYZ_1, XYZ_2,XYZ_3我们说的.

我如何df仅根据包含上述文本部分的列来设置我的基础(比方说,ABC或者XYZ)?我可以使用索引,但是数据中的列分散太多,而且编码太多了.

另外,我想只包含来自这些列的每一行的行,其中任何值都是>0如此,如果6上面的任一列1在行中有一个,它就会切入我的最终数据帧.

r subset

46
推荐指数
6
解决办法
11万
查看次数

标签 统计

subset ×10

r ×8

dataframe ×2

r-faq ×2

algorithm ×1

collections ×1

ggplot2 ×1

java ×1

na ×1

pandas ×1

python ×1

random ×1

reshape ×1

time-series ×1

xts ×1