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

问题描述

我试图将每个特定 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,4L),ID = c(24L,24L,25L,25L),Value = c(10L,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