r - 根据第二个数据帧总结一个数据帧
问题描述
我有两个不同的数据框,例如 df1 和 df2 如下:
df1 <- read.table(text = " Class Head Group
A1 12 1
A2 11 2
A3 10 1
A4 9 2
A5 10 1
", header = TRUE)
df2 <- read.table(text = " Temp1 Temp2 Temp3 Temp4 Temp5
13 13 14 11 17
13 8 19 14 15
14 2 20 15 14
15 7 9 19 9
", header = TRUE)
我想在给定 df1 的 Temps 中获取每个班级和 Head 的频率。Temp1 对应 A1,Temp2 对应 A2,依此类推。因此,例如,如果我在 Temp1 中看到值 < 12(请参阅 A1 的 Head),我将计算它们。在 Temp1 中,Head 中的所有值都大于 12,因此 A1 的 No=0。对于 A2,您在 df1 中看到 11,所以我需要查看 Temp2,我看到 3 个值 (8,2,7) 小于 11,因此 A2 的 No=3 等等...
我想得到以下结果:
Class Head No
A1 12 0
A2 11 3
A3 10 1
A4 9 0
A5 19 1
解决方案
我们可以将第二个数据集转换为“长”格式,执行 aleft_join
并获取逻辑表达式的计数
library(dplyr)
library(tidyr)
df2 %>%
rename_all(~ as.character(df1$Class)) %>%
pivot_longer(everything(), names_to = 'Class') %>%
left_join(df1) %>%
group_by(Class) %>%
summarise(Head = first(Head), No = sum(value < Head))
# A tibble: 5 x 3
# Class Head No
# <chr> <int> <int>
#1 A1 12 0
#2 A2 11 3
#3 A3 10 1
#4 A4 9 0
#5 A5 10 1
在base R
中,我们可以复制 'Head' 列并使用它来比较
df1$No <- colSums(df2 < df1$Head[col(df2)])
df1[-3]
# Class Head No
#1 A1 12 0
#2 A2 11 3
#3 A3 10 1
#4 A4 9 0
#5 A5 10 1
推荐阅读
- powershell - 在事件日志中获取特定任务的开始结束时间
- php - PHP & SMTP2GO - 在本地站点与远程站点上发送批量电子邮件
- sequence - 关于Raku中素数计算代码的问题
- c# - 方法调用上的 DispatchProxy 实例 TypeLoadException 返回泛型类型
- android - JNI如何管理c++缓冲区的生命周期
- html - Flex-grow 在 IE 11 上表现不同
- c++ - 在 ATL ActiveX 控件中嵌入自定义 UWP 控件
- r - 在 R 中编写函数以使用 pROC 绘制 ROC 曲线
- javascript - 尝试使用地图方法而不是使用 React Typescript 的 for 循环
- android - 在opencv中使用javacamera2view