gpt4 book ai didi

r - 根据列总和从数据框中排除列

转载 作者:行者123 更新时间:2023-12-03 13:58:34 25 4
gpt4 key购买 nike

我正在处理包含社区数据的数据集,并且许多列(种类)都有很多零。我希望能够根据整个专栏的总和将这些专栏用于我正在进行的某些分析。
我很想通过for循环来做到这一点,但是我听说当您使用R时,apply和by函数会更好。
我的目标是删除总和少于15的所有列。
我已使用which()按因素删除行,例如,

September<-which(data$Time_point=="September")

data<-data[-September,]


而我尝试删除列的两种方法是使用 apply()

data<-data[,apply(data,2,function(x)sum(x<=15))]


并通过使用凌乱的循环/如果其他组合:

for (i in 6:length(data)){
if (sum(data[,i])<=15)
data[,i]<-NULL
else
data[,i]<-data[,i]
}


这些方法都没有起作用。当然,有一种优雅的方法可以根据逻辑准则摆脱列?

str(head(data,10))
'data.frame': 10 obs. of 23 variables:
$ Core_num : Factor w/ 159 levels "152","153","154",..: 133 72 70 75 89 85 86 90 95 99
$ Cage_num : num 0 1 2 3 4 5 6 7 8 9
$ Treatment : Factor w/ 4 levels "","C","CC","NC": 1 2 2 2 2 2 2 2 2 2
$ Site : Factor w/ 10 levels "","B","B07","B08",..: 1 8 8 8 7 7 7 7 9 9
$ Time_point : Factor w/ 3 levels "","May","September": 1 2 2 2 2 2 2 2 2 2
$ Spionidae : num 108 0 0 0 0 0 0 0 0 0
$ Syllidae : num 185 0 0 0 3 8 0 1 4 1
$ Opheliidae : num 424 0 1 0 0 0 1 1 0 0
$ Cossuridae : num 164 0 7 3 0 0 0 0 0 0
$ Sternaspidae: num 214 0 0 6 1 0 11 9 0 0
$ Sabellidae : num 1154 0 2 2 0 ...
$ Capitellidae: num 256 1 10 17 0 3 0 0 0 0
$ Dorvillidae : num 21 1 0 0 0 0 0 0 0 0
$ Cirratulidae: num 17 0 0 0 0 0 0 0 0 0
$ Oligochaeta : num 3747 12 41 27 32 ...
$ Nematoda : num 410 5 4 13 0 0 0 2 2 0
$ Sipuncula : num 33 0 0 0 0 0 0 0 0 0
$ Ostracoda : num 335 0 1 0 0 0 0 0 0 0
$ Decapoda : num 62 0 4 0 1 0 0 0 0 0
$ Amphipoda : num 2789 75 17 34 89 ...
$ Copepoda : num 75 0 0 0 0 0 0 0 0 0
$ Tanaidacea : num 84 0 0 0 1 0 0 0 0 0
$ Mollusca : int 55 0 4 0 0 0 0 0 0 0

最佳答案

那么一个简单的子集呢?首先,我们创建一个简单的数据框L

R> dd = data.frame(x = runif(5), y = 20*runif(5), z=20*runif(5))


然后选择总和大于15的列

R> dd1 = dd[,colSums(dd) > 15]
R> ncol(dd1)
[1] 2


在您的数据集中,您只想对第6列及以后的子集进行子集化,如下所示:

 ##Drop the first five columns
dd[,colSums(dd[,6:ncol(dd)]) > 15]


要么

 #Keep the first six columns
cols_to_drop = c(rep(TRUE, 5), dd[,6:ncol(dd)]>15)
dd[,cols_to_drop]


应该管用。



需要注意的关键部分是在方括号中,我们需要逻辑向量,即TRUE和FALSE的向量。因此,如果您想使用稍微复杂一点的子集,请创建一个返回TRUE或FALSE的函数,并像往常一样返回子集。

关于r - 根据列总和从数据框中排除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10608060/

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