2016-10-25 23 views
1

我對R很新,我想弄清楚如何編寫代碼以獲取基於不同條件的多個列的頻率。基於特定條件找到多個變量/列的頻率R

示例數據

ID  Group Age Gender Total_T Neg_Mood_T Interpersonal_Prob_T  
6000-01-00 0 9 1 44.00 49.00 42.00 44.00 48.00 40.00 
6000-02-00 0 12 1 53.00 54.00 42.00 59.00 52.00 51.00 
6000-03-00 0 7 2 72.00 50.00 56.00 58.00 81.00 84.00 
6000-04-00 0 7 1 41.00 44.00 49.00 47.00 41.00 40.00 
6000-05-00 0 9.5 1 38.00 44.00 42.00 39.00 41.00 40.00 
6000-06-00 1 8 1 39.00 38.00 57.00 39.00 41.00 40.00 
6000-07-00 1 9 1 38.00 44.00 42.00 39.00 41.00 40.00 
6000-08-00 1 18 1 41.00 44.00 44.00 48.00 41.00 40.00 
6000-09-00 1 9 2 58.00 54.00 45.00 47.00 69.00 56.00 
6000-10-00 1 11 2 42.00 40.00 45.00 47.00 46.00 40.00 

於是,我開始用一個簡單的碼弄清楚的基礎上在該代碼中的一些病症的變量發生什麼頻率:

條件1:

Total_T <- sum(data$Total_T[data$Group==0]>=60, na.rm=TRUE) 

條件1:

Total_T <- sum(data$Total_T[data$Group==0]<60, na.rm=TRUE) 

但是,我需要爲不同的變量和不同的條件多次重複這段代碼(即,條件1將重複4個變量,條件2等),我想弄清楚如何使它更有效。

因此,我希望創建一個代碼,根據我在Group,Age和Gender上的條件返回Total_T,Neg_Mood_T等的頻率。

我試過使用data.frame(table()),ddply,但我真的難住了。

謝謝!

+1

請閱讀[(1)](http://stackoverflow.com/help/how-to-ask)我該如何問一個好問題,[(2)] (http://stackoverflow.com/help/mcve)如何創建一個MCVE以及[(3)](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r -reproducible-example#answer-5963610)如何在R中提供最小可重現的示例。然後相應地編輯和改進您的問題。 – Christoph

+0

懸崖筆記的版本是添加1)一些示例數據2)您想要的輸出3)讓你到達那裏的邏輯。 –

回答

0

我們可以使用subset得到我們所需要的數據,部分則sum

x1 <- subset(data, Group== 0 & Gender == 1, select="Total_T") 
sum(x1[x1 >= 60], na.rm=TRUE) 
sum(x1[x1 < 60], na.rm=TRUE) 

#Wrapped in a function 
fun <- function(cols) { 
    x1 <- subset(data, Group== 0 & Gender == 1, select=cols) 
    sum(x1[x1 >= 60], na.rm=TRUE) 
} 

fun("Total_T") 
[1] 176 
fun("Neg_Mood_T") 
[1] 191 

如果你想獲得一次性的所有列,您可以使用:

library(dplyr) 
data %>% filter(Group == 0 & Gender == 1) %>% 
    summarise_at(-(1:4), funs(sum(.[. < 60]))) 
# Total_T Neg_Mood_T Interpersonal_Prob_T col7 col8 col9 
# 1  176  191     175 189 182 171 

編輯

還有就是Total_T適合的值的總和之間的差異條件並將值合適描述的次數相加。我們可以舉一個例子:

x <- 1:10 

#condition 
x > 5 

#1. sum values fitting the condition 
sum(x[x > 5]) 
[1] 40 

#2. sum number of times a value fits condition 
sum(x > 5) 
[1] 4 
+0

嘿!所以,我試圖創建的代碼必須考慮小於/大於60的條件。 例如,當total_T> 60時,當組爲0且性別爲1時,我在尋找Total_T的頻率,如果這樣做合理的話。 – solomo31

+0

編輯以反映條件。 –

+0

嗨皮埃爾, 所以,我試着在家裏運行代碼,每次我試圖運行它的樂趣(「Total_T」)返回0像其他變量一樣。你知道這可能是爲什麼嗎?另外,我意識到我的初始代碼可能是誤導性的。我使用了求和函數,因爲我能夠根據這些條件而不是實際總和得到該特定變量的頻率。所以,使用 Total_T < - sum(data $ Total_T [data $ Group == 0]> = 60,na.rm = TRUE),我會得到1.所以,我想在這種情況下sum函數可能是不合適,使用長度會更好嗎?那該怎麼看? – solomo31