根据 R 中的另一个文件替换文件中的值

Replace values in a file based on another file in R

我有:我有两个数据框。它们都具有相同的列名和行名以及相同的维度(行数和列数相等):

records <- read.table(text ="     D0  D1  D2  D3  
1  0       0     1    NA       
2  1       1     1    1       
3  1       0     NA    1       
4  0       NA     0    0", header = TRUE)

   covariate <- read.table(text ="     D0  D1  D2  D3  
1   70       1     6    3       
2  121       4     8    5       
3   86       3     2    4       
4  141       2     5    2", header = TRUE)

我想要的: 用 NA 替换 'covariate' 数据框中的特定值。要替换的值是那些与 'records' 具有 NA 的位置完全相同的值。结果应如下所示:

covariate_fixed <- read.table(text ="     D0  D1  D2  D3  
1   70       1     6    NA       
2  121       4     8    5       
3   86       3     NA    4       
4  141       NA     5    2", header = TRUE)

我能找到的与我的问题最接近的线程是:Replace values from another dataframe by IDs and Replace values from another dataframe by IDs但是,除了列名和行名之外,我在两个文件中都没有匹配值,并且没有给出替换规则通过特定 ID 但针对数据框中的特定位置。我也找到了其他类似性质的帖子,但 none 我可以找到一种方法来适应我的具体问题。

有人可以帮我用 R 编写代码来执行此操作吗?谢谢!

is.na(covariate) <- is.na(records)

给予

> covariate
   D0 D1 D2 D3
1  70  1  6 NA
2 121  4  8  5
3  86  3 NA  4
4 141 NA  5  2

提示:

  • is.na<- 对找东西很有用
  • DF 和矩阵可以通过 i,j 或仅 i 进行索引,因此当维度相同时,您不必考虑将一个数据框的属性复制到另一个数据框.

给你。此代码逐列进行,仅将协变量中的数字替换为记录中的 NA 值。

for(i in 1:ncol(covariate)){
  covariate[is.na(records[,i]),i] <- records[is.na(records[,i]), i]
}

print(covariate)