gpt4 book ai didi

R dplyr : Find a specific value in a column, 然后用该值替换右侧后续列中的相邻单元格

转载 作者:行者123 更新时间:2023-12-02 17:30:36 24 4
gpt4 key购买 nike

我正在尝试创建一个站点和事件时间的矩阵。就我而言,一旦事件发生(“1”),它就是永久性的并且不能返回到“0”。一旦列中的单元格为“1”,我就会尝试用“1”填充右侧后续列中的相邻单元格(请参见下面的示例)。

site <- c('A','B','C','D','E','F','G') #site
time <- c(0,1,4,0,3,2,0) # time in which even occured
event <- c(0,1,1,0,1,1,0) # did a event occur
data <- data.frame(site, time, event)

site.time.matrix <- cast(data, site~time)

# This is the output # This is the desired output
#site 0 1 2 3 4 #site 0 1 2 3 4
# A 0 NA NA NA NA # A 0 0 0 0 0
# B NA 1 NA NA NA # B 0 1 1 1 1
# C NA NA NA NA 1 # C 0 0 0 0 1
# D 0 NA NA NA NA # D 0 0 0 0 0
# E NA NA NA 1 NA # E 0 0 0 1 1
# F NA NA 1 NA NA # F 0 0 1 1 1
# G 0 NA NA NA NA # G 0 0 0 0 0

我发现了一些使用 dplyr 的有前途的代码,例如( Replacing more than one elements with replace functionApply function to each column in a data frame observing each columns existing data type )替换值,尽管我不确定如何在后续列参数中指定相邻单元格。

如果这个问题不清楚,我深表歉意,这是我在 StackOverflow 上的第一篇文章。

谢谢。

最佳答案

第一篇用户帖子详细、可重复且有趣,真是令人惊喜,+1!

使用 zoo 包中的 na.locf 你可以这样做:

library(reshape) # for cast function
library(zoo) #for na.locf function short for if NA, last observation carrried forward, ?na.locf

site <- c('A','B','C','D','E','F','G') #site
time <- c(0,1,4,0,3,2,0) # time in which even occured
event <- c(0,1,1,0,1,1,0) # did a event occur
data <- data.frame(site, time, event)

site.time.matrix <- reshape::cast(data, site~time)

site.time.matrix.fill <- site.time.matrix


# Transpose the matrix excluding first column, carry forward last observation and
# transpose again to return to original matrix structure

site.time.matrix.fill[,-1] <- t(na.locf(t(site.time.matrix.fill[,-1])))

site.time.matrix.fill[is.na( site.time.matrix.fill)] <- 0

site.time.matrix.fill

# site 0 1 2 3 4
#1 A 0 0 0 0 0
#2 B 0 1 1 1 1
#3 C 0 0 0 0 1
#4 D 0 0 0 0 0
#5 E 0 0 0 1 1
#6 F 0 0 1 1 1
#7 G 0 0 0 0 0

关于R dplyr : Find a specific value in a column, 然后用该值替换右侧后续列中的相邻单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40129272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com