相关疑难解决方法(0)

从分组数据中选择第一行和最后一行

使用dplyr,如何在一个语句中选择分组数据的顶部和底部观察/行?

数据和示例

给定一个数据框架

df <- data.frame(id=c(1,1,1,2,2,2,3,3,3), 
                 stopId=c("a","b","c","a","b","c","a","b","c"), 
                 stopSequence=c(1,2,3,3,1,4,3,1,2))
Run Code Online (Sandbox Code Playgroud)

我可以使用每个组的顶部和底部观察结果slice,但使用两个单独的语句:

firstStop <- df %>%
  group_by(id) %>%
  arrange(stopSequence) %>%
  slice(1) %>%
  ungroup

lastStop <- df %>%
  group_by(id) %>%
  arrange(stopSequence) %>%
  slice(n()) %>%
  ungroup
Run Code Online (Sandbox Code Playgroud)

我可以将这两个statmenets合并成一个选择两个顶部和底部的意见?

r dplyr

120
推荐指数
7
解决办法
8万
查看次数

如何按组(ID)复制最后一行?

我有一个随着时间推移接触表面的data.frame。我只想为每个AcvitivityID附加最后一行的副本:

head(movsdf.rbind)
  ActivityID CareType HCWType Orientation    Surface       Date     Time       Dev.Date.Time SurfaceCategories
1         01       IV    RN01  leftFacing AlcOutside 2019-08-03 11:08:01 2019-08-03 11:08:01       HygieneArea
2         01       IV    RN01  leftFacing         In 2019-08-03 11:08:12 2019-08-03 11:08:12                In
3         01       IV    RN01  leftFacing       Door 2019-08-03 11:08:12 2019-08-03 11:08:12        FarPatient
4         02       IV    RN01  leftFacing       Door 2019-08-03 11:08:18 2019-08-03 11:08:18        FarPatient
5         02       IV    RN01  leftFacing      Other 2019-08-03 11:08:22 2019-08-03 11:08:22        FarPatient
6         03       IV    RN01  leftFacing      Table 2019-08-03 11:10:26 2019-08-03 11:10:26       NearPatient
Run Code Online (Sandbox Code Playgroud)

示例数据:

movsdf.rbind<-data.frame(ActivityID=rep(1:4, each=10),Surface=rep(c("In","Table","Out"),each=10)) …
Run Code Online (Sandbox Code Playgroud)

r dplyr data.table tidyverse

8
推荐指数
1
解决办法
109
查看次数

如何从分组数据中的最后一个条目中减去第一个条目

我将非常感谢以下任务的一些帮助:从下面的数据框(C)中,对于每个id,我想d_2从最终条目中减去列下的第一个条目,然后将结果存储在包含相同ID的另一个数据框中.然后我可以将它与我的初始数据帧合并.请注意,减法必须按此顺序排列(最后一个条目减去每个条目的第一个条目id).

以下是代码:

id <- c("A1", "A1", "B10","B10", "B500", "B500", "C100", "C100", "C100", "D40", "D40", "G100", "G100")

d_1 <- c( rep(1.15, 2), rep(1.44, 2), rep(1.34, 2), rep(1.50, 3), rep(1.90, 2), rep(1.59, 2))

set.seed(2)

d_2 <- round(runif(13, -1, 1), 2)

C <- data.frame(id, d_1, d_2)

id   d_1   d_2
A1   1.15 -0.63
A1   1.15  0.40
B10  1.44  0.15
B10  1.44 -0.66
B500 1.34  0.89
B500 1.34  0.89
C100 1.50 -0.74
C100 1.50  0.67
C100 1.50 -0.06
D40 …
Run Code Online (Sandbox Code Playgroud)

r dataframe

6
推荐指数
1
解决办法
2316
查看次数

计算 R 中多个单独案例的单个案例中两个观察值之间的差异

我有一个类似于以下的数据集。

\n\n
Case <- c("A", "B", "C", "A", "B", "C", "A", "B", "C")\nObservationNumber <- c(1, 1, 1, 2, 2, 2, 3, 3, 3)\nObservedValue <- c(154, 152, 157, 173, 176, 171, 203, 205, 199)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我正在尝试创建一个新的数据框,其中一列是案例(A、B 或 C),第二列是从第一次观察到第三次观察的观察值的变化。行数就是不同案例的数量(上例中为 3 行,但实际数据集中为数百行)。

\n\n

有一些解决方法可以适用于示例数据,但我的真实数据有数百个案例,每个案例有 50 个观察值。因此,我需要某种方法来做到这一点,不需要(1)为每个案例创建一个单独的数据集(例如通过过滤)来执行减法,这是我能够想出的唯一方法自己的。

\n\n

有没有人有其他想法来做到这一点?

\n\n

**此外,在示例中,行是按顺序排列的,但在真实数据集中,它们不是按顺序排列的。因此,我可以\xe2\x80\x99t只取每组中的第一行和最后一行;我需要获取每组中具有最大值和最小值的行。下面的两个答案都很好地解决了这个问题。

\n

r subtraction

2
推荐指数
1
解决办法
1438
查看次数

获取 R 中每组的最后一行

我有一些结构类似于的数据:

a <- data.frame("ID" = c("A", "A", "B", "B", "C", "C"),
                "NUM" = c(1, 2, 4, 3, 6, 9),
                "VAL" = c(1, 0, 1, 0, 1, 0))
Run Code Online (Sandbox Code Playgroud)

我正在尝试对其进行排序IDNUM然后获取最后一行。此代码用于获取最后一行并将其汇总为唯一 ID,但是,它实际上并没有像我想要的那样获取完整的最后一行。

a <- a %>% arrange(ID, NUM) %>%
  group_by(ID) %>%
  summarise(max(NUM))
Run Code Online (Sandbox Code Playgroud)

我明白为什么这段代码不起作用,但我正在寻找dplyr获取每个唯一的最后一行的方法ID

预期成绩:

  ID        NUM     VAL
  <fct    <dbl>    <dbl>
1 A           2       0
2 B           4       1
3 C           9       0
Run Code Online (Sandbox Code Playgroud)

注意:我承认,虽然它几乎是Select first and last row from grouped data的副本,但该线程上的答案并不是我想要的。

r dataframe dplyr

2
推荐指数
2
解决办法
1万
查看次数

标签 统计

r ×5

dplyr ×3

dataframe ×2

data.table ×1

subtraction ×1

tidyverse ×1