State Year APPT   mood ranney_4yrs folded_ranney_4yrs time censor
Arizona 1970    3 47.778   0.3299708          0.8299708   30      0
Arizona 1971    3 51.948   0.3265375          0.8265375   31      0
Arizona 1972    3 48.429   0.3246062          0.8246062   32      0
Arizona 1973    3 42.909   0.3226750          0.8226750   33      0
Arizona 1974    1 40.548   0.3683167          0.8683167   34      1
Arizona 1975    1 39.517   0.4139583          0.9139583   35      1
Arizona 1976    1 38.659   0.4543917          0.9543917   36      1
Arizona 1977    1 36.995   0.4948250          0.9948250   37      1

我有这个数据框,我想删除“检查器”列中除第一个实例外的所有实例。 我可以编写什么代码来保留第一个实例并在“检查器”列中删除所有后续的1实例?

#1楼 票数:0

如果数据帧由检查器列排序,则将执行此操作:

df[df[,'censor']!=1 | !duplicated(df[,'censor']),]

#2楼 票数:0 已采纳

无论检查器列的顺序如何,此解决方案都将起作用:

df[df$censor!=1 | ave(df$censor,df$censor,FUN=function(x) 1:length(x))==1,];

它通过导出每个不同的检查者值的“运行计数”来工作。 我以一种非常不寻常的方式使用了ave()函数来为每个唯一的检查值评估一次表达式1:length(x) ,并且ave()函数执行了必要的工作以将每个结果“计数向量”映射回排列检查向量在分组向量中的顺序(即ave()的第二个参数)。 ave()的第一个参数的内容(而不是长度)是完全无关的,因为表达式1:length(x)仅取决于组的长度,而不取决于其内容。 (但是,对于第一个参数重用分组向量是有意义的,因为可以保证长度正确,即与分组向量的长度相同。)因此, ave()的返回值表示每个检查器的运行计数。值,根据它们在“检查器”列中出现的顺序正确排序。 然后可以在索引操作中使用运行计数来选择仅首先出现的行,即运行计数值为1的行(至少对于检查值1而言; |的LHS会选择所有其他检查值,而不考虑发生的行)数)。

这是一个演示,在这里我略微检查了“检查器”列以演示不可知论的顺序:

df <- data.frame(State=c('Arizona','Arizona','Arizona','Arizona','Arizona','Arizona','Arizona','Arizona'), Year=c(1970,1971,1972,1973,1974,1975,1976,1977), APPT=c(3,3,3,3,1,1,1,1), mood=c(47.778,51.948,48.429,42.909,40.548,39.517,38.659,36.995), ranney_4yrs=c(0.3299708,0.3265375,0.3246062,0.3226750,0.3683167,0.4139583,0.4543917,0.4948250), folded_ranney_4yrs=c(0.8299708,0.8265375,0.8246062,0.8226750,0.8683167,0.9139583,0.9543917,0.9948250), time=c(30,31,32,33,34,35,36,37), censor=c(1,0,1,0,0,1,0,1) );
df;
##     State Year APPT   mood ranney_4yrs folded_ranney_4yrs time censor
## 1 Arizona 1970    3 47.778   0.3299708          0.8299708   30      1
## 2 Arizona 1971    3 51.948   0.3265375          0.8265375   31      0
## 3 Arizona 1972    3 48.429   0.3246062          0.8246062   32      1
## 4 Arizona 1973    3 42.909   0.3226750          0.8226750   33      0
## 5 Arizona 1974    1 40.548   0.3683167          0.8683167   34      0
## 6 Arizona 1975    1 39.517   0.4139583          0.9139583   35      1
## 7 Arizona 1976    1 38.659   0.4543917          0.9543917   36      0
## 8 Arizona 1977    1 36.995   0.4948250          0.9948250   37      1
df[df$censor!=1 | ave(df$censor,df$censor,FUN=function(x) 1:length(x))==1,];
##     State Year APPT   mood ranney_4yrs folded_ranney_4yrs time censor
## 1 Arizona 1970    3 47.778   0.3299708          0.8299708   30      1
## 2 Arizona 1971    3 51.948   0.3265375          0.8265375   31      0
## 4 Arizona 1973    3 42.909   0.3226750          0.8226750   33      0
## 5 Arizona 1974    1 40.548   0.3683167          0.8683167   34      0
## 7 Arizona 1976    1 38.659   0.4543917          0.9543917   36      0

  ask by Jeremy R. Johnson translate from so

未解决问题?本站智能推荐:

2回复

子集数据框中所有非唯一行(基于向量/列)..或删除唯一行

我有一个包含许多基因的数据框(列是“基因”)。 有些基因出现不止一次。 我想对数据框进行子集化,其中我只有出现多次的基因。 换句话说,我想删除相对于“基因”列唯一的行。
1回复

如果一行符合条件,则删除类别的所有行

问题:如果其中一行在另一列中具有特定值,则我想删除特定类别的所有行(类似于下面链接中的问题)。 但是,主要区别在于我希望它只在匹配另一列中的条件时才能工作。 做练习df 所以我的数据框看起来像这样。 我想要删除所有主题2,因为它的值为0,对于一行中的注册列,其值为A.但是我想在不删
2回复

用包含其均值的一行替换R数据框中的两行

我想知道将 R 中数据框中的两行替换为仅包含这两行平均值的一行的最佳方法是什么? 例如,假设我有一个与此类似的数据框: 我想用一行替换 id2 和 id3 行,id.average 包含 id2 ((2+3)/2) 和 id3 ((2+9)2) 的平均值,所以我希望我的数据帧最终看起来像这样: 我计
4回复

在对称数据框中删除满足条件的行和列

环境我的任务看起来与此相似,但不完全相同。 假设我有一个像这样的对称数据框 看起来像这样 因为如果一行充满零是对称的,具有相同索引的相应列也将充满零。 我想做的事我想删除所有仅包含零的行和列(通常,我想删除满足某些条件的所有行和列)。 理想情况下,我想在 tidyverse 中使用函数。 如果我能以
2回复

在满足条件的情况下,在R中的数据帧的子集中,对每列采样一行

作为数据示例,在数据帧中有具有三行数据的GROUP 1和具有两行数据的GROUP 2: 我想从GROUP 1的每一列中抽样一个变量,以创建代表GROUP 1的新行。我不想从GROUP 1抽样一个完整的行,而是需要对每一列分别进行抽样。 我想对GROUP 2执行相同的操作。此外,除非该组变量
1回复

R-如何根据数据框中一行中的值创建列的子集

我有一个矩阵,我想分组并最终用于制作情节。 该数据是群体中每个患者的特定血液标记物的计数列表。 它看起来像这样: 我想建立所有患者(第3-6列)的数据框,其类值为零(第1行),所有患者的第二个数据框的类值为1。 在过去,我使用子集函数根据列中的值选择行,是否可以根据行中的值选择列的子
1回复

在R中从一行到另一行子集

我在R中有一个表格,如下所示: 我想要一个表子集。 该子集必须从“ NumData”列中的“ 7”到“ 8”开始。 我的意思是我想要这个子集: 我认为可以在R中使用subset()函数。我该怎么做? 谢谢
3回复

基于多个行删除条件的子集数据框

考虑以下由列名“id”和“x”组成的数据框,其中每个 id 重复四次。 数据如下: 问题是关于如何通过以下标准对数据框进行子集化: (1) 保留每个 id 的所有条目,如果它在 x 列中的对应值不包含 3 或者它的最后一个数字是 3。 (2) 对于给定的 id 在 x 列中具有多个 3,将所有数