从Excel过渡到R:如何在R中实现if语句和索引逻辑?

RTr*_*n3k 1 excel r

正如标题所描述的那样,我正在从Excel过渡到R,但我发现实现非常棘手的数据操作在Excel中更直观,而不是R.

我有两个数据框:

A <- read.table(text="Var1  Var2    Var3    Var4
                      1 0   2   0
                      3 4   0   0
                      0 6   0   7", header=T)
B <- read.table(text="VarA  VarB
                      2.24  1.82
                      3.07  2.97
                      6.5   7.46", header=T)
Run Code Online (Sandbox Code Playgroud)

我想从A和B创建第3个数据框,如下所示:

Result <- read.table(text="Result1  Result2 Result3 Result4
                           2.24     NA      1.82    NA
                           3.07     2.97    NA      NA
                           NA       6.5     NA      7.46", header=T)
Run Code Online (Sandbox Code Playgroud)

因此,如果数据帧的行r和列c中的元素A<> 0,则在数据帧的行r和列中按顺序放置来自数据帧的行的元素. cResultsrB

在Excel中我会使用如下公式: 在此输入图像描述

the*_*ail 5

由于matrix对象是按列而不是行填充的,因此您必须进行一些t调整以确保按正确的顺序填充它们:

replace(replace(A,TRUE,NA), which(t(A)!=0,arr.ind=TRUE)[,2:1], t(B) )

#     Var1 Var2 Var3 Var4
#[1,] 2.24   NA 1.82   NA
#[2,] 3.07 2.97   NA   NA
#[3,]   NA 6.50   NA 7.46
Run Code Online (Sandbox Code Playgroud)