标签: subset

在 R 中创建训练和测试数据集

我想从 中创建训练和测试数据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)

我究竟做错了什么?

r subset training-data

1
推荐指数
1
解决办法
9914
查看次数

过滤具有特定后缀的行

我在一个名为 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"

regex r subset filter grepl

1
推荐指数
1
解决办法
526
查看次数

使用 R 中的函数基于列值对数据框进行子集

我正在尝试使用以下函数对数据帧进行子集化。

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)

r function subset

1
推荐指数
1
解决办法
157
查看次数

检查 data.frame 列中的所有非数字条目并删除或替换

我正面临一个特定的经验问题。我在 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)

select r subset dataframe

1
推荐指数
1
解决办法
2391
查看次数

如何根据前一行过滤行并使用 dplyr 保留前一行?

我正在尝试使用基于前一行的条件对数据集的行进行子集化,同时将前一行保留在子集化数据中。这与此处的问题基本相同,但我正在寻找一种 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)

任何帮助将不胜感激!

r subset filter conditional-statements dplyr

1
推荐指数
1
解决办法
1522
查看次数

如何在 dask.dataframe 中对一行进行子集化?

我正在尝试使用 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用于子集化,我该怎么做?

python subset loc dask

1
推荐指数
1
解决办法
5127
查看次数

取决于一列重复的单独数据框

我有一个包含很多行和列的大型数据框。在一列中有字符,其中一些只出现一次,另一些则出现多次。我现在想分离整个数据框,这样我最终会得到两个数据框,一个是所有行的字符在这一列中重复,另一个是所有行的字符只出现一次. 例如:

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)

r subset duplicates dataframe

1
推荐指数
1
解决办法
327
查看次数

使用基本 R 进行过滤和排序不起作用

我有一个表(作为 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)

r subset dataframe

1
推荐指数
1
解决办法
67
查看次数

检查列表中的每个字符串(所有字符串)是否是另一个字符串中至少一个字符串中的子字符串

我很难检查 python 列表中的所有字符串是否是另一个 python 列表中任何字符串的子集。

示例:我想检查的每个字符串(所有字符串)list1是否至少包含在其中的一个字符串中list2,如果是,请执行某些操作。

list1 = ['tomato', 'onions','egg']
list2 = ['Two tomatos', 'two onions','two eggs','salsa']
Run Code Online (Sandbox Code Playgroud)

例如,在这个例子中,它会返回True.

python substring list subset python-3.x

1
推荐指数
1
解决办法
68
查看次数

从应用程序脚本中的二维数组中提取选定列的最佳方法

我在谷歌应用程序脚本中工作。如果我从范围 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)

arrays extract subset slice google-apps-script

1
推荐指数
1
解决办法
788
查看次数