[英]Filtering out columns from an R data.frame based on the sum of its values for all rows
[英]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 問題,例如:
但是,我找不到在個體去世后進行截止部分的解決方案(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.