r - 第二行变量的频率计数
问题描述
我有一个如下所示的数据框,我正在寻找简单的解决方案来计算以数字开头的列名的变量计数。在数据框中添加第二行后。
df <- data.frame(AA=c(72,62,43,66,54,64,47,47,27,68),
BB=c("AMK","KAMl","HAJ","NHS","KUL","GAF","BGA","NHU","VGY","NHU"),
CC=c("TAMAN","GHUSI","KELVIN","DEREK","LOKU","MNDHUL","JASMIN","BINNY","BURTAM","DAVID"),
DD=c(62,41,37,41,32,74,52,75,59,36),
EE=c("CA","NY","GA","DE","MN","LA","GA","VA","TM","BA"),
FF=c("ENGLISH","FRENCH","ENGLISH","FRENCH","ENGLISH","ENGLISH","SPANISH","ENGLISH","SPANISH","RUSSIAN"),
GG=c(33,44,51,51,37,58,24,67,41,75),
`1A`=c("","D","","NA","","D","","","D",""),
`2B`=c("","A","","","A","A","A","A","",""),
`3C`=c("","","","","","","","","",""),
`4D`=c("","G","G","G","G","G","G","G","",""),
"Concatenate" = c("","DAG","G","NAG","AG","DAG","AG","AG","D",""))
他的输出应该如下所示。它就像列名称的值的计数,这些名称以最后一列中的任意数字和总和开头。在数据框中添加第二行后。
解决方案
您可以使用
summary_row =
df %>%
summarize(across(c(matches("^[0-9]"), Concatenate), ~sum(!is.na(.) & . != "" & . != "NA")))
summary_row
# 1A 2B 3C 4D Concatenate
# 1 3 5 0 7 8
result = bind_rows(mutate(summary_row, across(everything(), as.character)), df)
# reorder columns
result[names(df)]
# AA BB CC DD EE FF GG 1A 2B 3C 4D Concatenate
# 1 NA <NA> <NA> NA <NA> <NA> NA 3 5 0 7 8
# 2 72 AMK TAMAN 62 CA ENGLISH 33
# 3 62 KAMl GHUSI 41 NY FRENCH 44 D A G DAG
# 4 43 HAJ KELVIN 37 GA ENGLISH 51 G G
# 5 66 NHS DEREK 41 DE FRENCH 51 NA G NAG
# 6 54 KUL LOKU 32 MN ENGLISH 37 A G AG
# 7 64 GAF MNDHUL 74 LA ENGLISH 58 D A G DAG
# 8 47 BGA JASMIN 52 GA SPANISH 24 A G AG
# 9 47 NHU BINNY 75 VA ENGLISH 67 A G AG
# 10 27 VGY BURTAM 59 TM SPANISH 41 D D
# 11 68 NHU DAVID 36 BA RUSSIAN 75
您可以使用 将其绑定到数据框的顶部bind_rows
,但仅出于演示目的。数据框列只能有一种类型,因此如果汇总行中的数字与character
您已有的列组合,它们将转换为字符。
我使用了这些数据(添加check.names = FALSE
到您的data.frame()
代码中,以便列名显示为您的示例):
df <- data.frame(AA=c(72,62,43,66,54,64,47,47,27,68),
BB=c("AMK","KAMl","HAJ","NHS","KUL","GAF","BGA","NHU","VGY","NHU"),
CC=c("TAMAN","GHUSI","KELVIN","DEREK","LOKU","MNDHUL","JASMIN","BINNY","BURTAM","DAVID"),
DD=c(62,41,37,41,32,74,52,75,59,36),
EE=c("CA","NY","GA","DE","MN","LA","GA","VA","TM","BA"),
FF=c("ENGLISH","FRENCH","ENGLISH","FRENCH","ENGLISH","ENGLISH","SPANISH","ENGLISH","SPANISH","RUSSIAN"),
GG=c(33,44,51,51,37,58,24,67,41,75),
`1A`=c("","D","","NA","","D","","","D",""),
`2B`=c("","A","","","A","A","A","A","",""),
`3C`=c("","","","","","","","","",""),
`4D`=c("","G","G","G","G","G","G","G","",""),
"Concatenate" = c("","DAG","G","NAG","AG","DAG","AG","AG","D",""), check.names = F)
推荐阅读
- addeventlistener - AddEventListener 仅适用于最后一张图片
- swift - SwiftUI Multiline Text Background Color
- python - 使用 lambda 表达式在 Python 中实现字符串包含函数
- javascript - HTML5 视频播放器 + 模式 + 空格键问题
- java - 将 Socket 从 Android 发送到 Python 服务器
- javascript - 在 NextJS /pages/api 中使用反应钩子
- html - Clickable and hover menu css
- php - 如何将图像保存在 public_html 而不是 laravel 中的默认存储?
- java - Send a string through WiFi-Direct between two android devices
- python - No whitespace between Seaborn barplot bars