Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确定一个值何时与另一个值匹配,并替换为另一个指定值R_R_Data.table - Fatal编程技术网

确定一个值何时与另一个值匹配,并替换为另一个指定值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