计算数据框中高于阈值的行数作为函数或其他列因子
Posted
技术标签:
【中文标题】计算数据框中高于阈值的行数作为函数或其他列因子【英文标题】:calculate number of rows in a dataframe above threshold as a function or other column factors 【发布时间】:2017-03-25 12:38:04 【问题描述】:我想在值大于 11 的每一天找到每个主题的行数,并将其输出到数据框中进行分析。数据集很大(5000 行),因此需要一个函数。
subject = c(rep("A", 12), rep("B", 12))
day = c(1,1,1,1,2,2,2,2,3,3,3,3,1,1,1,1,2,2,2,2,3,3,3,3)
value = c(13,14,15,5,12,9,6,14,4,2,1,2,13,14,15,5,12,9,6,14,2,2,2,3)
df = data.frame(subject, day, value)
df
subject day value
1 A 1 13
2 A 1 14
3 A 1 15
4 A 1 5
5 A 2 12
6 A 2 9
7 A 2 6
8 A 2 14
9 A 3 4
10 A 3 2
11 A 3 1
12 A 3 2
13 B 1 13
14 B 1 14
15 B 1 15
16 B 1 5
17 B 2 12
18 B 2 9
19 B 2 6
20 B 2 14
21 B 3 2
22 B 3 2
23 B 3 2
24 B 3 3
我想要的输出是
subject.agg = c(rep("A", 3), rep("B", 3))
day.agg = as.factor(c(1,2,3,1,2,3))
highvalues = (c(3,2,0,3,2,0))
df.agg = data.frame(subject.agg,day.agg,highvalues)
df.agg
subject.agg day.agg highvalues
1 A 1 3
2 A 2 2
3 A 3 0
4 B 1 3
5 B 2 2
6 B 3 0
非常感谢任何帮助。
【问题讨论】:
非常感谢两位。 DT 解决方案非常适合我。 【参考方案1】:一个选项是aggregate
来自base R
aggregate(cbind(highvalues=value>11)~., df, sum)
或者data.table
library(data.table)
setDT(df)[value>11, .(highvalues=.N), by = .(subject, day)]
# subject day highvalues
#1: A 1 3
#2: A 2 2
#3: A 3 3
#4: B 1 3
#5: B 2 2
#6: B 3 3
【讨论】:
这太好了,非常感谢。无论如何,我是否可以在输出主题日中包含没有高于 11 的值。即,对于主题 A 有第四天没有高于 11 的值,它会显示为 A 4 0?谢谢!! @MLyall 您能否更新您的帖子,了解您对所需输出的期望 @MLyall 您可以使用join
使用“主题”、“日期”的所有独特组合,也可以使用if/else
谢谢,我已将问题更新为更具体
@MLyall 也许setDT(df)[value>11, .(highvalues=.N), by = .(subject, day)][CJ(subject = df$subject, day = df$day, unique=TRUE), on = c('subject', 'day')][is.na(highvalues), highvalues := 0][]
【参考方案2】:
你可以走tidyverse
的方式:
df %>%
filter(value > 11) %>%
group_by(subject,day) %>%
mutate(highvalue = n()) %>%
select(subject, day, highvalue) %>%
unique()
【讨论】:
【参考方案3】:library(data.table)
dt = setDT(df)
dt[, sum(value>11),by = .(subject,day)]
subject day V1
1: A 1 3
2: A 2 2
3: A 3 3
4: B 1 3
5: B 2 2
6: B 3 3
【讨论】:
以上是关于计算数据框中高于阈值的行数作为函数或其他列因子的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用car包的vif函数计算方差膨胀因子,并基于方差膨胀因子开方后和阈值的判断来确认模型特征(预测变量)之间是否存在多重共线性(Multicollinearity)