根据两个数据框中的列有条件地替换值
Condtional replacement of values based on columns in two dataframes
我下面有两个数据框,它们的列名相同。我想将 df_B 中基于敌人的值更改为 NA df_A 中的每个“1”。请参阅“目标”以了解我希望实现的目标。
谢谢!
日期框架 A
ID x1 x2 x3
A NA 1 NA
B NA 1 1
C NA 1 NA
数据框 B
ID x1 x2 x3
A 0 9 0
B 10 4 6
C 0 5 5
目标
ID x1 x2 x3
A 0 NA 0
B 10 NA NA
C 0 NA 5
关于如何执行此操作的任何想法?我试过使用 ifelse 函数和子集无济于事。
谢谢大家!
我们通过检查元素是否等于 1,用第一列以外的第一个数据创建一个逻辑矩阵。使用它来对没有第一列的 df2 中的值进行子集化,并将它们分配给 NA
df2[-1][(df1[-1] == 1) & !is.na(df1[-1])] <- NA
由于 'df1' 中有 NA
个元素,我们可以使用 is.na
来检查不是 NA
且为 1
的元素
-输出
df2
# ID x1 x2 x3
#1 A 0 NA 0
#2 B 10 NA NA
#3 C 0 NA 5
数据
df1 <- structure(list(ID = c("A", "B", "C"), x1 = c(NA, NA, NA), x2 = c(1L,
1L, 1L), x3 = c(NA, 1L, NA)), class = "data.frame", row.names = c(NA,
-3L))
df2 <- structure(list(ID = c("A", "B", "C"), x1 = c(0L, 10L, 0L), x2 = c(9L,
4L, 5L), x3 = c(0L, 6L, 5L)), class = "data.frame", row.names = c(NA,
-3L))
我下面有两个数据框,它们的列名相同。我想将 df_B 中基于敌人的值更改为 NA df_A 中的每个“1”。请参阅“目标”以了解我希望实现的目标。
谢谢!
日期框架 A
ID x1 x2 x3
A NA 1 NA
B NA 1 1
C NA 1 NA
数据框 B
ID x1 x2 x3
A 0 9 0
B 10 4 6
C 0 5 5
目标
ID x1 x2 x3
A 0 NA 0
B 10 NA NA
C 0 NA 5
关于如何执行此操作的任何想法?我试过使用 ifelse 函数和子集无济于事。 谢谢大家!
我们通过检查元素是否等于 1,用第一列以外的第一个数据创建一个逻辑矩阵。使用它来对没有第一列的 df2 中的值进行子集化,并将它们分配给 NA
df2[-1][(df1[-1] == 1) & !is.na(df1[-1])] <- NA
由于 'df1' 中有 NA
个元素,我们可以使用 is.na
来检查不是 NA
且为 1
-输出
df2
# ID x1 x2 x3
#1 A 0 NA 0
#2 B 10 NA NA
#3 C 0 NA 5
数据
df1 <- structure(list(ID = c("A", "B", "C"), x1 = c(NA, NA, NA), x2 = c(1L,
1L, 1L), x3 = c(NA, 1L, NA)), class = "data.frame", row.names = c(NA,
-3L))
df2 <- structure(list(ID = c("A", "B", "C"), x1 = c(0L, 10L, 0L), x2 = c(9L,
4L, 5L), x3 = c(0L, 6L, 5L)), class = "data.frame", row.names = c(NA,
-3L))