Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.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 根据另一数据帧中首次出现的值,将数据帧行中的剩余值替换为NA_R_Dataframe_Apply_Mapply - Fatal编程技术网

R 根据另一数据帧中首次出现的值,将数据帧行中的剩余值替换为NA

R 根据另一数据帧中首次出现的值,将数据帧行中的剩余值替换为NA,r,dataframe,apply,mapply,R,Dataframe,Apply,Mapply,我有两个数据帧,其中一个有数字行子集,表示时间序列,另一个是与初始数据帧中的时间点相关的1和0数据帧 基于布尔数据帧,我想在布尔数据帧中第一次出现0的时间点用NA替换初始数据帧中的值 示例如下所示: df1 ID category t1 t2 t3 1 A 5 5.2 7 2 A 7 7.5 8 3 B 9 10.3 11 4 B 3 4.1 4.7 5 C

我有两个数据帧,其中一个有数字行子集,表示时间序列,另一个是与初始数据帧中的时间点相关的1和0数据帧

基于布尔数据帧,我想在布尔数据帧中第一次出现0的时间点用NA替换初始数据帧中的值

示例如下所示:

df1

ID  category  t1   t2   t3
1      A      5    5.2  7
2      A      7    7.5  8
3      B      9    10.3 11
4      B      3    4.1  4.7
5      C      2    3    4.5


df2

t1   t2   t3
0     1   1
1     0   1
1     1   1
1     1   0
0     0   1

生成的数据帧应该只是第一个数据帧的修改版本,但某些值由基于df2的NA替换,如下所示

df1

ID  category  t1   t2   t3
1      A      NA   NA   NA
2      A      7    NA   NA
3      B      9    10.3 11
4      B      3    4.1  NA
5      C      NA   NA   NA


我正在努力寻找一种非常有效的方法,在R

中使用
rowCumsums
选项来实现这一点。从“df2”(
df2==0
)创建一个逻辑
矩阵
),然后使用
rowCumsums
获得每行的累积和,将其更改为逻辑矩阵(
>0
),并将“df1”中的相应元素替换为
NA

library(matrixStats)
df1[names(df2)] <- df1[names(df2)] *NA^(rowCumsums(df2 == 0) > 0)
数据
df1带有
rowCumsums
的选项。从“df2”(
df2==0
)创建一个逻辑
矩阵
),然后使用
rowCumsums
获得每行的累积和,将其更改为逻辑矩阵(
>0
),并将“df1”中的相应元素替换为
NA

library(matrixStats)
df1[names(df2)] <- df1[names(df2)] *NA^(rowCumsums(df2 == 0) > 0)
数据
df1
df1
#  ID category t1   t2 t3
#1  1        A NA   NA NA
#2  2        A  7   NA NA
#3  3        B  9 10.3 11
#4  4        B  3  4.1 NA
#5  5        C NA   NA NA
df1 <- structure(list(ID = 1:5, category = c("A", "A", "B", "B", "C"
), t1 = c(5L, 7L, 9L, 3L, 2L), t2 = c(5.2, 7.5, 10.3, 4.1, 3), 
    t3 = c(7, 8, 11, 4.7, 4.5)), class = "data.frame", row.names = c(NA, 
-5L))

df2 <- structure(list(t1 = c(0L, 1L, 1L, 1L, 0L), t2 = c(1L, 0L, 1L, 
1L, 0L), t3 = c(1L, 1L, 1L, 0L, 1L)), class = "data.frame", 
row.names = c(NA, 
-5L))