基于R中分类变量的子设置

数据挖掘 r
2022-03-06 18:48:53

下面的数据集只是 100 行数据集的前 8 行。

>a
  group marks    upd
2     C     3     up
3     C     4   down
6     C     7     up
1     T     2     up
4     T     5     up
5     T     6   down
7     T     1 middle
8     T     0   down

我使用 unique_groups=unique(a$group) 来获取要发送到函数的唯一组名列表。

现在,我需要一个函数,它给出这个数据集的一个子集,它从 unique_groups 中获取每个组,并检查“upd”是否在 ('down','middle') 中,并给我一个数据集,其中只有那些记录有 upd (' down','middle') 的相应组。

我尝试使用 do.call 函数来获取我想要的数据集 -

do.call(rbind,sapply(unique_groups,FUN=function(y) { h=a[agroup==x & aupd %in% c('down','middle'),] h } , 简化=F))

我没有得到我想要的数据集,它给出了这个警告信息:

==.default(a$group, x) :较长的对象长度不是较短对象长度的倍数

2个回答

这个问题似乎更适合一般的 stackoverflow,因为它是一个 R 问题。

我正在使用data.table. 语法与 有点不同data.frame,但花在学习上的时间data.table非常值得。在wiki上查看更多教程,以及这个好

library(data.table)
s = "rowname    group   marks   upd
2   C   3   up
3   C   4   down
6   C   7   up
1   T   2   up
4   T   5   up
5   T   6   down
7   T   1   middle
8   T   0   down"
# fread is the fastest csv reader
a = fread(s) 
# the i in data.table[i,j] subset rows, empty j select all columns
upd_subset = a[upd %in% c('down','middle'),]

> upd_subset
   rowname group marks    upd
1:       3     C     4   down
2:       5     T     6   down
3:       7     T     1 middle
4:       8     T     0   down

> upd_subset_bygroups = split(upd_subset, upd_subset$group)
> upd_subset_bygroups
$C
   rowname group marks  upd
1:       3     C     4 down

$T
   rowname group marks    upd
1:       5     T     6   down
2:       7     T     1 middle
3:       8     T     0   down

试试这个

new_dataframe<- 子集(a,upd=="down" | upd=="middle")