所以我试图用我的数据表中的不同记录创建一个表
mytable <-
group team num ID
1 a x 1 9
2 a x 2 4
3 a y 3 5
4 a y 4 9
5 b x 1 7
6 b y 4 4
7 b x 3 9
8 b y 2 8
列名称为组,团队,编号和ID。我想要一个单独的表,其中包含每个列中不同记录的计数。我希望表名的格式为“ table_colName”
colName <- c('group','team','num','ID')
for (col in colName)
'table_'+colName <- mytable %>% group_by(col) %>% summarise(Count = n())
这将生成错误“ grouped_df_impl(数据,未命名(vars),删除)中的错误:列col不明”。
有没有一种方法可以使用数据表中的列遍历group_by函数并将其每次保存到新数据表中,因此在此示例中,我最终得到table_group,table_team,table_num和table_ID?
答案 0 :(得分:1)
一种选择是将group_by_at
与lapply
结合使用。您需要将mytable
的列传递给lapply
。该函数将每列分组,结果将在列表中提供。
library(dplyr)
lapply(names(mytable), function(x){
group_by_at(mytable, x)%>%summarise(Count = n()) %>% as.data.frame()
})
# [[1]]
# group Count
# 1 a 4
# 2 b 4
#
# [[2]]
# team Count
# 1 x 4
# 2 y 4
#
# [[3]]
# num Count
# 1 1 2
# 2 2 2
# 3 3 2
# 4 4 2
#
# [[4]]
# ID Count
# 1 4 2
# 2 5 1
# 3 7 1
# 4 8 1
# 5 9 3
数据:
mytable <- read.table(text=
"group team num ID
1 a x 1 9
2 a x 2 4
3 a y 3 5
4 a y 4 9
5 b x 1 7
6 b y 4 4
7 b x 3 9
8 b y 2 8",
header = TRUE, stringsAsFactors = FALSE)
答案 1 :(得分:0)
尝试一下:
mytable %>%
group_by(.dots=c('group','team','num','ID')) %>%
summarise(Count = n())
答案 2 :(得分:0)
我能够使用下面的代码解决此问题,谢谢大家为我提供帮助的尝试,但是我是编码新手,对不起,这个问题对不起!
colName <- c('group','team','num','ID')
for (col in colName) {
tables <- paste('table',col, sep = '_')
assign(tables, mytable %>% group_by(.dots = col) %>% summarise(Count = n()))
}
答案 3 :(得分:0)
使用data.table
和lapply
的解决方案。
创建数据
library(data.table)
dt <- read.table(text = "
group team num ID
1 a x 1 9
2 a x 2 4
3 a y 3 5
4 a y 4 9
5 b x 1 7
6 b y 4 4
7 b x 3 9
8 b y 2 8")
生成结果的代码
setDT(dt)
l <- lapply(cnms, function(i)setnames(dt[, .N, get(i)], "get", i))
names(l) <- paste0("table_", cnms)
str(l)