确定一个值何时与另一个值匹配,并替换为另一个指定值R
我有以下数据:确定一个值何时与另一个值匹配,并替换为另一个指定值R,r,data.table,R,Data.table,我有以下数据: ID <- c(7,7,7,3,3,4,4,4,10,10,5) t <- c(NA,NA,NA,1,NA,NA,NA,NA,2,NA,3) z <- c(NA,NA,NA,7,NA,NA,NA,NA,4,NA,10) dt <- data.table(ID,t,z) ID t z 1: 7 NA NA 2: 7 NA NA 3: 7 NA NA 4: 3 1 7 5: 3 NA NA 6: 4 NA NA 7:
ID <- c(7,7,7,3,3,4,4,4,10,10,5)
t <- c(NA,NA,NA,1,NA,NA,NA,NA,2,NA,3)
z <- c(NA,NA,NA,7,NA,NA,NA,NA,4,NA,10)
dt <- data.table(ID,t,z)
ID t z
1: 7 NA NA
2: 7 NA NA
3: 7 NA NA
4: 3 1 7
5: 3 NA NA
6: 4 NA NA
7: 4 NA NA
8: 4 NA NA
9: 10 2 4
10: 10 NA NA
11: 5 3 10
是否可以更正我的代码,然后找到一种更简单的方法,按顺序从t=1重复到t=3
预期结果如下所示,因为在ID中,4s已更改为10s,然后10s已更改为5s:
ID t z
1: 3 NA NA
2: 3 NA NA
3: 3 NA NA
4: 3 1 7
5: 3 NA NA
6: 5 NA NA
7: 5 NA NA
8: 5 NA NA
9: 5 2 4
10: 5 NA NA
11: 5 3 10
非常感谢每当ID中出现7时,当t=1时,它将更改为ID的值
ID[which(ID==7)]=ID[which(t==1)]
每当ID中出现4时,当t=2时,它将更改为ID的值
ID[which(ID==4)]=ID[which(t==2)]
每当ID中出现10时,当t=3时,它将更改为ID的值
ID[which(ID==10)]=ID[which(t==3)]
在通过删除NA行创建数据集之后,我们可以使用
for
循环来实现这一点
dt1 <- dt[complete.cases(t,z)]
#Or
#dt1 <- na.omit(dt)
#loop through the sequence of rows in 'dt1'
#based on the logical index on 'i' for 'ID', assign 'ID' to the corresponding 'ID' in 'dt1'
for(i in seq_len(nrow(dt1))){
dt[ID %in% dt1$z[i], ID := dt1$ID[i]][]
}
dt
# ID t z
# 1: 3 NA NA
# 2: 3 NA NA
# 3: 3 NA NA
# 4: 3 1 7
# 5: 3 NA NA
# 6: 5 NA NA
# 7: 5 NA NA
# 8: 5 NA NA
# 9: 5 2 4
#10: 5 NA NA
#11: 5 3 10
dt1非常感谢。是否有方法指定第一个“which”参数,以便它标识ID中的值,当t=1、t=2等时,这些值与z中的值相匹配?不必输入ID==7、ID==4和ID==10?
dt1 <- dt[complete.cases(t,z)]
#Or
#dt1 <- na.omit(dt)
#loop through the sequence of rows in 'dt1'
#based on the logical index on 'i' for 'ID', assign 'ID' to the corresponding 'ID' in 'dt1'
for(i in seq_len(nrow(dt1))){
dt[ID %in% dt1$z[i], ID := dt1$ID[i]][]
}
dt
# ID t z
# 1: 3 NA NA
# 2: 3 NA NA
# 3: 3 NA NA
# 4: 3 1 7
# 5: 3 NA NA
# 6: 5 NA NA
# 7: 5 NA NA
# 8: 5 NA NA
# 9: 5 2 4
#10: 5 NA NA
#11: 5 3 10