首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除前10个和后10个值

删除前10个和后10个值
EN

Stack Overflow用户
提问于 2019-01-15 23:08:27
回答 3查看 70关注 0票数 1

我有一个包含多个个体和同一个体的多个值的文件。我需要删除每个人的前10个和最后10个值,将所有剩余的值放入一个新的表中。

下面是我的数据:

代码语言:javascript
复制
Cow        Data   
NL123456   123
NL123456   456

我试着做一个for循环,计算每个人有多少个值(但我想,我已经被困在那里了,因为我没有使用我认为正确的命令?Cow中的所有变量都是一个因子)。我认为删除第一个和最后一个必须是这样的:data1[c(11: n-10),]

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-15 23:16:55

如果您知道cow中的数据点始终超过20个,则可以执行以下操作,如iris数据集所示:

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

dim(iris)
# [1] 150   5

iris_trimmed <-
  iris %>%
  group_by(Species) %>%
  slice(11:(n()-10)) %>%
  ungroup()

dim(iris_trimmed)
# [1] 90  5

在你的数据上:

代码语言:javascript
复制
res <-
  your_data %>%
  group_by(Cow) %>%
  slice(11:(n()-10)) %>%
  ungroup()

在base R中,你可以这样做:

代码语言:javascript
复制
iris_trimmed <- do.call(
  rbind, 
  lapply(split(iris, iris$Species),
         function(x) head(tail(x,-10),-10)))

dim(iris_trimmed)
# [1] 90  5
票数 3
EN

Stack Overflow用户

发布于 2019-01-15 23:44:13

使用data.table

代码语言:javascript
复制
library(data.table)
idt <- as.data.table(iris)
idt[, .SD[11:(.N-10)], Species]

base R中的相同逻辑

代码语言:javascript
复制
do.call(
  rbind, 
  lapply(
    split(iris, iris[["Species"]]), 
    function(x) x[11:(nrow(x)-10), ]
  )
)
票数 1
EN

Stack Overflow用户

发布于 2019-01-15 23:17:08

这里有一个使用dplyr的解决方案。

在我的示例中,我只剪切了第一个和最后一个值。(您可以通过在filter中将2更改为任何数字来调整它)。

其思想是在group_by id之后添加每个观察值的行数,从顶部开始(n),从底部开始反向(n1),然后简单地过滤掉。

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

data %>% 
  group_by(id) %>% 
  mutate(n=1:n(),
         n1 = n():1) %>% # n and n1 are the row numbers
  filter(n >= 2,n1 >= 2) %>%  # change 2 with 10, or whatever
# filter() keeps only the rows that you want
  select(-n, -n1) %>%
  ungroup()
# # A tibble: 4 x 2
# id value
# <dbl> <int>
# 1     1     6
# 2     1     8
# 3     2     1
# 4     2     2

数据:

代码语言:javascript
复制
set.seed(123)
data <- data.frame(id = c(rep(1,4), rep(2,4)), value=sample(8))
data
#   id value
# 1  1     3
# 2  1     6
# 3  1     8
# 4  1     5
# 5  2     4
# 6  2     1
# 7  2     2
# 8  2     7
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54201609

复制
相关文章

相似问题

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