我在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)
有关更好地从集合中抽取随机子集的方法的任何建议吗?
我有一个数据框,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) 我有一个大型CSV,其中包含来自不同位置的医疗调查结果(位置是数据中存在的因素).由于某些分析特定于某个位置并且为了方便起见,我想仅从这些位置提取具有行的子帧.碰巧该位置是第一个字段所以是的,我可以通过对CSV行进行排序来实现,但我想学习如何在R中进行操作,因为我确信我需要将其用于其他列.
所以,简而言之,问题是:给定一个数据框foo,如何创建另一个数据框条,它只包含来自foo的行foo $ location ='there'?
非常感谢.
我有类似这样的数据:
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转换到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)
谢谢.
可能重复:
从数据框中删除多个元素的标准方法
我知道在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)
但我希望有一些更高效的东西.
我有一个问题是使用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的组合,但我总是失败..
我一直在遇到我认为的错误.这不是什么大问题,但我很好奇是否有其他人看过这个.不幸的是,我的数据是保密的,所以我必须要弥补的例子,它不会是非常有益的.
当子集化我的数据,我偶尔得到不在我的原始数据帧神秘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包导入我的原始数据集然后在子集化之前执行从长到长的重塑这一事实有关.
谢谢
有非常好的方法来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)
如何获取所有年份的特定月份或所有月份和年份的特定日期的所有数据?是否存在任何其他子集技巧?
有没有办法让我根据以特定字符串开头的列名来对数据进行子集化?我有一些相似的列,ABC_1 ABC_2 ABC_3有些像XYZ_1, XYZ_2,XYZ_3我们说的.
我如何df仅根据包含上述文本部分的列来设置我的基础(比方说,ABC或者XYZ)?我可以使用索引,但是数据中的列分散太多,而且编码太多了.
另外,我想只包含来自这些列的每一行的行,其中任何值都是>0如此,如果6上面的任一列1在行中有一个,它就会切入我的最终数据帧.