簡體   English   中英

如何對R中data.frame中兩個相鄰列的值求和但保持0?

[英]How to sum values from two adjacent columns in a data.frame in R but keep 0s as such?

我有一個包含一組動物的缺席/存在數據 (0/1) 的 data.frame,列是年份,行是個體。

我的數據:

df <- data.frame(Year1 = c('1','0','0','0','0','0'),
                 Year2 = c('1','1','1','0','0','0'),
                 Year3 = c('1','1','1','1','1','0'),
                 Year4 = c('0','1','1','1','1','1'),
                 Year5 = c('0','0','1','1','1','1'),
                 Year6 = c('0','0','0','0','0','0'))

df
     Year1 Year2 Year3 Year4 Year5 Year6
1:     1     1     1     0     0     0
2:     0     1     1     1     0     0
3:     0     1     1     1     1     0
4:     0     0     1     1     1     0
5:     0     0     1     1     1     0
6:     0     0     0     1     1     0

我想要做的是計算每個人每年的年齡,這意味着我想將 col1 添加到 col2,然后將總和添加到 col3,依此類推,使上述數據框變為:

df
     Year1 Year2 Year3 Year4 Year5 Year6
1:     1     2     3     0     0     0
2:     0     1     2     3     0     0
3:     0     1     2     3     4     0
4:     0     0     1     2     3     0
5:     0     0     1     2     3     0
6:     0     0     0     1     2     0

重要的是,零應該保持為零:一旦在一系列非零值之后有一列帶有 0 的列,該值應該再次為 0,因為動物已經死亡並且不會繼續存在於種群中。

我瀏覽了許多 stackoverflow 問題,例如:

對 R 中矩陣中每一列的相鄰列求和

但是,我找不到在個體去世后進行截止部分的解決方案(4 年后的 0 表示該動物已離開種群並且不應再記錄該年的年齡)。

預先感謝您的建議! :)

這是一個非常簡單的方法。 我們按行計算累積總和,然后乘以原始數據框——乘以 0 將 0 項歸零,乘以 1 保持總和項保持原樣。 由於您的數字周圍有引號使它們成為character類,因此我們首先將您的所有列轉換為numeric

df[] = lapply(df, as.numeric)
result = t(apply(df, 1, cumsum)) * df
result
#   Year1 Year2 Year3 Year4 Year5 Year6
# 1     1     2     3     0     0     0
# 2     0     1     2     3     0     0
# 3     0     1     2     3     4     0
# 4     0     0     1     2     3     0
# 5     0     0     1     2     3     0
# 6     0     0     0     1     2     0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM