问题描述
我试图将每个特定 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