[英]How do I apply an ifelse function to all cells in a data frame?
我正在嘗試將 ifelse 語句應用於數據框中的所有單元格。 我很確定我想多了,但希望得到一些幫助/指導!
我有一個來自多個站點的植被覆蓋率(稍作修改)的數據框,其中站點名稱和植被類型分別是行名稱和列名稱(即數據框應僅包含數值):
dwarf shrub equisetum forb fungi graminoid lichen moss shrub-forb tall shrub tree
site1 33.25 0 21.25 1.0 35.25 3.25 60.00 0.00 34.25 0.25
site2 30.25 0 15.00 0.0 25.75 7.50 62.25 1.50 26.75 0
site3 50.00 0 10.00 0.5 23.50 3.25 65.00 6.75 18.50 0
site4 46.00 0 7.75 0.0 32.75 2.25 33.75 4.50 11.25 0.75
site5 28.00 0 11.00 0.0 40.00 6.00 30.00 0.00 38.00 0
site6 40.25 0 10.50 0.0 5.75 6.25 7.25 3.25 8.75 1.25
我試圖將數字四舍五入到最接近的整數,以便在值大於 1 時使用 round() 函數,在值小於 1 時使用天花板 () 函數。
這是我為嘗試執行此操作而編寫的代碼:
new.df <- if(old.df > 1){
round(old.df, digits = 0)} else{
ceiling(old.df)
}
我也試過沒有天花板功能:
new.df <- if(old.df > 1){
round(old.df, digits = 0)} else{
old.df == 1
}
我沒有成功應用語句的后半部分 (ceiling())。 我收到此錯誤:
Warning message:
In if (old.df > 1) { :
the condition has length > 1 and only the first element will be used
任何幫助將不勝感激,謝謝!
您提到了ifelse
,我認為使用lapply
將其應用於每一列是很lapply
。 (如果數據中存在非數字列,我將添加isnum
檢查,如果您的數據始終為numeric
,請隨意忽略它。)
isnum <- sapply(dat, is.numeric)
dat[isnum] <- lapply(dat[isnum], function(x) ifelse(x > 1, ceiling(x), round(x, 0)))
dat
# dwarf_shrub equisetum forb fungi graminoid lichen moss shrub_forb tall shrub tree
# 1 site1 34 0 22 1 36 4 60 0 35 0
# 2 site2 31 0 15 0 26 8 63 2 27 0
# 3 site3 50 0 10 0 24 4 65 7 19 0
# 4 site4 46 0 8 0 33 3 34 5 12 1
# 5 site5 28 0 11 0 40 6 30 0 38 0
# 6 site6 41 0 11 0 6 7 8 4 9 2
數據:我不得不重命名某些列,因為您的某些列名不容易讀入(空格、連字符)。
dat <- read.table(header = TRUE, stringsAsFactors = FALSE, text = "
dwarf_shrub equisetum forb fungi graminoid lichen moss shrub_forb tall shrub tree
site1 33.25 0 21.25 1.0 35.25 3.25 60.00 0.00 34.25 0.25
site2 30.25 0 15.00 0.0 25.75 7.50 62.25 1.50 26.75 0
site3 50.00 0 10.00 0.5 23.50 3.25 65.00 6.75 18.50 0
site4 46.00 0 7.75 0.0 32.75 2.25 33.75 4.50 11.25 0.75
site5 28.00 0 11.00 0.0 40.00 6.00 30.00 0.00 38.00 0
site6 40.25 0 10.50 0.0 5.75 6.25 7.25 3.25 8.75 1.25")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.