我已經通過SO完成了大量的搜索,並且沒有找到或可能沒有理解以下問題的解決方案。我有以下示例數據框:對大量列的分類變量進行計數
df <- data.frame(Day = c('Day 1', 'Day 2', 'Day 3', 'Day 1', 'Day 2', 'Day 3'),
WBC.esc = c('Yes', 'Yes', 'Yes', 'No', 'No', 'No'),
WBC.deesc = c('No', 'No', 'No', 'No', 'Yes', 'Yes'),
WBC.cdm = c('Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes'),
Hgb.esc = c('Yes', 'No', 'Yes', 'No', 'Yes', 'No'),
Hgb.deesc = c('No', 'Yes', 'No', 'No', 'No', 'Yes'),
Hgb.cdm = c('No', 'No', 'No', 'No', 'No', 'No'),
Plt.esc = c('No', 'No', 'Yes', 'No', 'No', 'No'),
Plt.deesc = c('Yes', 'Yes', 'No', 'No', 'Yes', 'Yes'),
Plt.cdm = c('Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes'))
# Day WBC.esc WBC.deesc WBC.cdm Hgb.esc Hgb.deesc Hgb.cdm Plt.esc Plt.deesc Plt.cdm
# 1 Day 1 Yes No Yes Yes No No No Yes Yes
# 2 Day 2 Yes No Yes No Yes No No Yes Yes
# 3 Day 3 Yes No Yes Yes No No Yes No Yes
# 4 Day 1 No No Yes No No No No No Yes
# 5 Day 2 No Yes Yes Yes No No No Yes Yes
# 6 Day 3 No Yes Yes No Yes No No Yes Yes
天數表示患者在醫院中的天數。其他列名稱是指訂單類型。我想回答在WBC/Hgb/Plt.esc或WBC/Hgb/Plt.deesc類別中是否有命令(「是」)的問題。在大數據集中,在* .esc之前還有其他前綴,例如HeartRate.esc,BP.esc,因此只需在.esc後綴上搜索就行不通。我知道如何通過指定每個列名稱來低效地執行此操作。使用下面的代碼:
sum(df$Day=="Day 1" & (df$WBC.esc=="Yes" | df$WBC.deesc=="Yes" | df$Hgb.esc=="Yes" | df$Hgb.deesc=="Yes" | df$Plt.esc=="Yes" | df$Plt.deesc=="Yes"))
# [1] 1
這給出了1
我已經通過引用它們的數量從而節省了我使用的全列名的列正確答案(例如:dt[,2]
代替dt$WBC.esc
),但即使在我的實際數據集中有時會有40-50列可供參考,但這似乎過分乏味。在完整的數據集中,我希望能夠做類似下面的事情(使用excel術語,因爲這是我熟悉的,字母表是列名)。這個想法是需要一行,查看該行中所有指定的列以獲得「是」值,如果它發現它,則將其計爲1,或者如果未找到「是」,則將其計爲0
countif(B:E=="Yes" | H:Y=="Yes" | AE:AG=="Yes")
我也試過這樣的:
sum(df$Day=="Day 1" & (dt[,2:3]=="Yes" | df[,5:6]=="Yes" | df[,8:9]=="Yes"),na.rm=TRUE)
不作爲它的工作回到「2」表明它正指望每一個回答「是」。另外這個功能不運行,除非列數引用每個參差不齊如dt[,2:4] | dt[,8:9]
在這種情況下,我得到:
"Error: binary operation on non-conformable arrays"
我已經通過了一些問題搜查,但在帖子中,我已經看到了列名單獨列出,未彙總。我怎樣才能執行引用多組相鄰列的操作,而不必單獨列出每個變量?
我編輯我的職務,以反映在大量的數據可能有多種其他前綴.esc或.deesc所以只是在尋找這些條款本身並在其他列拉。 – Kiddecks