我是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等等)我想弄清楚如何制作它更有效率。
所以,我希望根据我在群组,年龄和性别上的条件创建一个能够返回Total_T,Neg_Mood_T等频率的代码。
我尝试使用data.frame(table())
,ddply
,但老实说我很难过。
谢谢!
答案 0 :(得分: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