gpt4 book ai didi

r - 根据所有组中值的长度过滤 data.frame 中的行

转载 作者:行者123 更新时间:2023-12-02 08:01:22 25 4
gpt4 key购买 nike

我有一个像这样的数据框:

df<-data.frame( Id = paste0("g",1:6),
a= c(6:11),
b = c(10:13,NA,NA),
c = c(7:10,NA,10),
d = c(NA,7:9,NA,13),
e= c(NA,6:10),
f= c(NA,NA,NA,4:5,NA))
colnames(df)=c("ID",rep("normal",3),rep("patient",3))

> df
ID normal normal normal patient patient patient
1 g1 6 10 7 NA NA NA
2 g2 7 11 8 7 6 NA
3 g3 8 12 9 8 7 NA
4 g4 9 13 10 9 8 4
5 g5 10 NA NA NA 9 5
6 g6 11 NA 10 13 10 NA

此 df 包含两组(正常和患者)的数据。我将对所有行执行一些分析,因此每行中的所有组必须至少有两个值。我使用以下代码来筛选行所有组都没有至少两个值。

    fx=function(x){length(x[!is.na(x)])>=2}
f1=apply(df[,2:4], 1,fx)#filter based on group normal
f2=apply(df[,5:7], 1,fx)#filter based on group patient
df=subset(df,f1&f2)
> df
ID normal normal.1 normal.2 patient patient.1 patient.2
2 g2 7 11 8 7 6 NA
3 g3 8 12 9 8 7 NA
4 g4 9 13 10 9 8 4
6 g6 11 NA 10 13 10 NA

但这些代码对于组数有限的数据很有用。我的主要数据有 100 个组(所有组都有 3 个重复),colnames(df)=paste0("grp",sort(rep(1:100,3))) 因此我需要一些简单的代码来过滤包含 100 个组的 data.frame 中的行。

我的目标:删除每组中没有至少两个值的行。

最佳答案

可以做:

library(dplyr)

names(df) <- paste0(names(df), 1:ncol(df))

df %>%
filter(
rowSums(!is.na(select(., contains("normal")))) >= 2 &
rowSums(!is.na(select(., contains("patient")))) >= 2
)

关于r - 根据所有组中值的长度过滤 data.frame 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56824183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com