划分数据列中的特定单元格

Dividing specific cell in data column

我正在尝试将每个特定 ID 的第一个观察值除以 0.25。

我该怎么做?

例如我想将 ID 24 的第一个观察值除以 0.25,这样值(当前为 10)将更改为 (10/0.25) = 40

代码应该对所有具有 'Obs = 1' 的 ID 执行相同的操作,例如ID“25”的第一次观察应该是 (5/0.25) = 20.

我的数据示例如下:

Obs ID  Value
1   24  10
2   24  4
3   24  2
4   24  3
5   24  5
6   24  4
7   24  2
8   24  1
1   25  5
2   25  6
3   25  2
4   25  4

我该怎么做?

谢谢!

您可以将 Value 除以 0.25,其中 Obs = 1

inds <- df$Obs == 1
df$Value[inds] <- df$Value[inds]/0.25
df

#   Obs ID Value
#1    1 24    40
#2    2 24     4
#3    3 24     2
#4    4 24     3
#5    5 24     5
#6    6 24     4
#7    7 24     2
#8    8 24     1
#9    1 25    20
#10   2 25     6
#11   3 25     2
#12   4 25     4

数据

df <- structure(list(Obs = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 1L, 2L, 
3L, 4L), ID = c(24L, 24L, 24L, 24L, 24L, 24L, 24L, 24L, 25L, 
25L, 25L, 25L), Value = c(10L, 4L, 2L, 3L, 5L, 4L, 2L, 1L, 5L, 
6L, 2L, 4L)), class = "data.frame", row.names = c(NA, -12L))

使用易于理解的ifelse

  • baseR 方式
df$Value <- ifelse(df$Obs == 1, df$Value/ 0.25, df$Value)

dplyr方式

library(dplyr)
df %>% mutate(Value = ifelse(Obs == 1, Value/0.25, Value))

   Obs ID Value
1    1 24    40
2    2 24     4
3    3 24     2
4    4 24     3
5    5 24     5
6    6 24     4
7    7 24     2
8    8 24     1
9    1 25    20
10   2 25     6
11   3 25     2
12   4 25     4