正如标题所描述的那样,我正在从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
由于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)