首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除多个数据框中负值后的行

删除多个数据框中负值后的行
EN

Stack Overflow用户
提问于 2018-12-18 17:50:51
回答 2查看 93关注 0票数 0

我有多个数据帧,它们是独立的序列,由相同的列组成。在"OnsetTime“列中遇到负值后,我需要删除所有行。所以不是负值的那一行,而是它之后的那一行。所有序列总共有16行。我认为它必须能够循环,但我没有在r中循环的经验,并且我有499个数据帧,我目前正在逐个删除序列的行,如下所示:

代码语言:javascript
复制
sequence_6 <- sequence_6[-c(11:16), ]
sequence_7 <- sequence_7[-c(11:16), ]
sequence_9 <- sequence_9[-c(6:16), ]

有没有更快的方法来做这件事?序列的示例可以在这里看到example sequence Rag本例中,我想删除第7行到第16行

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-18 21:29:52

数据

由于工作中奇怪的web配置阻止我访问您的数据,我基于随机数创建了三个数据帧

代码语言:javascript
复制
set.seed(123); data_1 <- data.frame( value = runif(25, min = -0.1) )
set.seed(234); data_2 <- data.frame( value = runif(20, min = -0.1) )
set.seed(345); data_3 <- data.frame( value = runif(30, min = -0.1) )

首先,您可以创建一个包含所有数据帧的列表:

代码语言:javascript
复制
list_df <- list(data_1, data_2, data_3)

现在,您可以使用for循环遍历此列表。由于有几个步骤,我发现使用dplyr包很方便,因为它允许使用更具可读性的符号:

代码语言:javascript
复制
library(dplyr)

for( i in 1:length(list_df) ){

  min_row <- 
    list_df[[i]] %>%        
    mutate( id = row_number() ) %>% # add a column with row number 
    filter(value < 0) %>%           # get the rows with negative values
    summarise( min(id) ) %>%        # get the first row number 
    as.numeric()                    # transform this value to a scalar (not a dataframe)

  list_df[[i]] <- list_df[[i]] %>% slice(1:min_row) # get rows 1 to min_row 
}

希望它能帮上忙!

票数 0
EN

Stack Overflow用户

发布于 2018-12-18 17:54:05

我们可以将数据集放入序列中,假设对象名称以‘list’开头,后跟一个序列和一个或多个数字。然后使用lapply遍历list并根据条件设置行的子集

代码语言:javascript
复制
lst1 <- lapply(mget(ls(pattern="^sequence_\\d+$")), function(x) {
          i1 <- Reduce(`|`, lapply(x, `<`, 0))
          #or use rowSums
          #i1 <- rowSums(x < 0) > 0
          i2 <- which(i1)[1]
          x[seq(i2),]
       }
      )

数据

代码语言:javascript
复制
set.seed(42)
sequence_6 <- as.data.frame(matrix(sample(-1:10, 16 *5, replace = TRUE), nrow = 16))
sequence_7 <-  as.data.frame(matrix(sample(-2:10, 16 *5, replace = TRUE), nrow = 16))
sequence_9 <- as.data.frame(matrix(sample(-2:10, 16 *5, replace = TRUE), nrow = 16))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53830338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档