1

我想从数据框中删除零值与非零值的比率高于某个阈值(例如 0.4)的列。我编写的执行相同操作的代码如下

ZeroValRatio <- as.data.frame(colSums(train1==0)/nrow(train1))

ZeroValRatio <- rename(zeroValRatio,value="colSums(train1 == 0)/nrow(train1)")

drop <- as.data.frame(filter(ZeroValRatio,value>"0.3198630137"))

drop <-as.data.frame(t(drop))

df <- subset(train1,select = -which(colnames(drop)==colnames(train1)))

在这里,train1 = 我要执行操作的原始数据帧。

运行此代码后,最终数据帧“df”仍然有 4 个变量。此外,运行代码后

df2 = train1[,!(names(train1) %in% drop)]

我得到了 df2 和 train1 中的所有列,而没有实际执行删除操作。

4

1 回答 1

0

您可以从数据框中选择满足每列条件的患者。
这是一个模拟数据并选择特定列的代码。

#1- Simulating dataset
set.seed(1)
df1=data.frame(X1=sample(c(0,1),40,TRUE),X2=sample(c(0,1),40,TRUE),X3=sample(c(0,1),40,TRUE),X4=sample(c(0,1),40,TRUE))

#2- Checking which columns should be removed (i.e. proportion>=0.40)
apply(df1,2,function(x) sum(x==0)/length(x))

#3- Keeping only columns with the condition from df1 to df2
df2=df1[,which(apply(df1,2,function(x) sum(x==0)/length(x))>=0.40)]

#4- Verification
apply(df2,2,function(x) sum(x==0)/length(x))
于 2021-10-25T15:10:06.740 回答