我想从 中创建训练和测试数据mydata,其中有 2673 个观察值和 23 个变量。但是,我无法仅通过简单地减去训练数据来创建测试集。
dim(mydata)
## [1] 2673 23
set.seed(1)
train = mydata[sample(1:nrow(mydata), 1000, replace=FALSE), ]
dim(train)
## [1] 1000 23
Run Code Online (Sandbox Code Playgroud)
当我运行以下命令时,我收到 19 个警告,结果有 20,062 个观察值:
test = mydata[!train, ]
## There were 19 warnings (use warnings() to see them)
dim(test)
## [1] 20062 23
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我在一个名为 df 的表中有 12 列数据,第一列包含几千个字符串,例如AA150502-01, AA150502-02, BB150502-01, BB150502-03, etc.
我想过滤表格,以便只看到以 suffix 结尾的行"-01",我该怎么做?
到目前为止,我有:
myd <- subset(df, Date_ID == 'AA150502-01')
Run Code Online (Sandbox Code Playgroud)
我需要使用某种通配符作为前缀"-01"。
我正在尝试使用以下函数对数据帧进行子集化。
SubsetDF <- function(DF, VAR, YEAR){
DF2 <- DF[DF$VAR <= YEAR, ]
return(DF2)
}
test <- SubsetDF(myData, "YEAR", 2000)
Run Code Online (Sandbox Code Playgroud)
结果“测试”是空的。我在这里缺少什么?顺便说一句,如果我只是在下面做,那么结果数据框就可以了。
myData[myData$YEAR <= 2010,]
Run Code Online (Sandbox Code Playgroud) 我正面临一个特定的经验问题。我在 data.frame 列中有一个因变量。我可以轻松删除所有 NA 和所有非数字术语(不幸的是,这是一个开放式文本设计问题)。但是在那些非数字条目中有一些字符串和其他信息,我想手动检查(为了可能的插补)。
df <- data.frame(list(A=c(1, 2, 3, 4, 5, 6, 7, 8, 9), B=c("40g", "< 2", "thx", "about 1", "1-2", "1/2", 3, 2.3, "two")))
A B
1 1 40g
2 2 < 2
3 3 thx
4 4 about 1
5 5 1-2
6 6 1/2
7 7 3
8 8 2.3
9 9 two
Run Code Online (Sandbox Code Playgroud)
我认为没有特定的例程来列出所有非数字条目,并在每种情况下询问我是否要保留它或替换此条目的另一个值。但也许这至少对整个列来说是可能的?
最后我想得到以下结构:
A B
1 1 0.4
2 2 NA
3 3 NA
4 4 1.0
5 5 1.5
6 6 NA …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用基于前一行的条件对数据集的行进行子集化,同时将前一行保留在子集化数据中。这与此处的问题基本相同,但我正在寻找一种 dplyr 方法:
我已经采用了对该答案的评论中应用的 dplyr 方法,但我无法弄清楚保留前一行的最后一步。
我可以获得支持我感兴趣的条件的行(incorrect当前一行不是时enter)。
set.seed(123)
x=c("enter","incorrect","enter","correct","incorrect",
"enter","correct","enter","incorrect")
y=c(runif(9, 5.0, 7.5))
z=data.frame(x,y)
filter(z, x=="incorrect" & lag(x)!="enter")
Run Code Online (Sandbox Code Playgroud)
正如预期的那样:
x y
1 incorrect 7.351168
Run Code Online (Sandbox Code Playgroud)
我想要生成的是这样的,以便我根据条件过滤的所有行都与原始数据集中位于它们之前的行一起存储:
x y
1 correct 7.207544
2 incorrect 7.351168
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!
我正在尝试使用 command 从 dask.dataframe 中仅选择一行x.loc[0].compute()。它返回 4 行,所有行都具有index=0. 我试过了reset_index,但index=0重置后仍然会有 4 行。(我想我确实正确重置了,因为我做到了reset_index(drop=False)并且我可以在新列中看到原始索引)。
我阅读了dask.dataframe文档,它说,index=0由于 dask 如何构造块数据,可能会有不止一行的内容。
所以,如果我真的只想要一行index=0用于子集化,我该怎么做?
我有一个包含很多行和列的大型数据框。在一列中有字符,其中一些只出现一次,另一些则出现多次。我现在想分离整个数据框,这样我最终会得到两个数据框,一个是所有行的字符在这一列中重复,另一个是所有行的字符只出现一次. 例如:
One = c(1,2,3,4,5,6,7,8,9,10)
Two = c(4,5,3,6,2,7,1,8,1,9)
Three = c("a", "b", "c", "d","d","e","f","e","g","c")
df <- data.frame(One, Two, Three)
> df
One Two Three
1 1 4 a
2 2 5 b
3 3 3 c
4 4 6 d
5 5 2 d
6 6 7 e
7 7 1 f
8 8 8 e
9 9 1 g
10 10 9 c
Run Code Online (Sandbox Code Playgroud)
我希望有两个数据框,比如
> dfSingle
One Two Three
1 1 4 a
2 2 5 b
7 7 …Run Code Online (Sandbox Code Playgroud) 我有一个表(作为 data.frame),它看起来像这样:
Var1 Var2 Freq
364 NI taq 100
363 BB taq 47
323 AA ret 46
361 99 taq 33
360 88 taq 69
138 77 esc 111
358 66 taq 26
357 55 taq 23
356 44 taq 20
355 33 taq 143
354 22 taq 105
314 1212 ret 66
352 11 taq 114
Run Code Online (Sandbox Code Playgroud)
我想从 Var1 中删除“NI”并将 Freq 从最高到最低排序。理论上可以用
(df <- df[!df$Var1="NI" & order(df$Freq, decreasing=TRUE),])
Run Code Online (Sandbox Code Playgroud)
但我明白了:
Var1 Var2 Freq
363 BB taq 47
323 AA ret 46 …Run Code Online (Sandbox Code Playgroud) 我很难检查 python 列表中的所有字符串是否是另一个 python 列表中任何字符串的子集。
示例:我想检查的每个字符串(所有字符串)list1是否至少包含在其中的一个字符串中list2,如果是,请执行某些操作。
list1 = ['tomato', 'onions','egg']
list2 = ['Two tomatos', 'two onions','two eggs','salsa']
Run Code Online (Sandbox Code Playgroud)
例如,在这个例子中,它会返回True.
我在谷歌应用程序脚本中工作。如果我从范围 A1:E5 开始,那就是一个 5x5 数组。我想返回范围 C1:D5,一个 5x2 数组。从一个二维数组开始,只返回选定的“列”。基本上就是这样。我认为这是一项基本操作,但我真的很挣扎。我在下面有我的代码,但我对任何使用数组(不是范围,以避免不必要地 ping 服务器)的选项持开放态度。请注意,我确实希望能够为列传递数组参数,因此 [2,3,4] 或 [2] 或 [3,4],而不仅仅是单个或静态值。谢谢你的帮助。
/**
* extracts selected 'columns' (2nd dimension) from 2d array
*
* @arr {array} larger 2d array to be subset
* @cols {array} subset of columns, eg, [3,4]
* @return 2d array with only selected cols
* @customfunction
*/
function getCols(arr,cols) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var arrRows = [];
var arrCols = [];
for(var r=0;r<arr.length;r++){
arrCols = [];// reset snippet
for(var c=0;c<cols.length;c++){
arrCols.push([arr[r][cols[c]]]); // …Run Code Online (Sandbox Code Playgroud)