R 在分组后使用子数据集
假设我有一个数据集,其中graph_id从0到800R 在分组后使用子数据集,r,dplyr,dataset,R,Dplyr,Dataset,假设我有一个数据集,其中graph_id从0到800 x y index graph_id 1 3327 535 0_0 0 2 3316 529 0_1 0 3 3307 2359 0_2 0 4 3296 652 0_3 0 5 3283 2999 0_4 0 6 3281 73 0_5 0 我想使用每个基于graph_id的子数据集作为管道中mutate的
x y index graph_id
1 3327 535 0_0 0
2 3316 529 0_1 0
3 3307 2359 0_2 0
4 3296 652 0_3 0
5 3283 2999 0_4 0
6 3281 73 0_5 0
我想使用每个基于graph_id的子数据集作为管道中mutate的输入。
像这样:
test <- data %>%
group_by(graph_id) %>%
select(x, y) %>%
dist()
所以
是否可以仅使用dplyr而不使用lapply执行此类操作
更新
其思想是基于子数据帧创建新列,而不创建其他变量。如果您在mutate(在我的例子中)中使用{.}
来处理初始数据帧,那么这是可能的:
data <-
data %>%
mutate(id = {.} %>%
group_by(graph_id) %>%
select(x, y) %>%
do(a = dist(.) %>%
as.matrix() %>%
melt(varnames = c("row", "col")) %>%
mutate(weight = 1/value *100) %>%
filter(row < col) %>%
rename(from = row,
to = col) %>%
graph_from_data_frame(directed = F) %>%
fastgreedy.community() %>%
membership()) %>%
.['a'] %>%
unlist() %>%
unname())
数据%
变异(id={.}%>%
分组依据(图形id)%>%
选择(x,y)%>%
do(a=距离(%)%>%
as.matrix()%>%
熔化(varnames=c(“行”、“列”))%>%
变异(权重=1/值*100)%>%
过滤器(行<列%>%
重命名(从=行,
to=列)%>%
来自数据帧的图形(定向=F)%>%
fastgreedy.community()%>%
成员资格())%>%
.[a']%>%
取消列表()%>%
名称())
您是否尝试过do(dist(.))
?do
动词保持分组。谢谢!,它帮助了很多你想要的输出是什么dist
将返回一个较低的三角形,因此需要更多的操作。如果您的输入组(子帧)有m
行,那么您的输出将有m*(m-1)/2
值(在具有m-1
行和列的矩阵中),因此您不能仅将其分配给新列,并且cbind
使其快速增长。您的输出可能包括两行索引(from和to)以及它们之间的距离,这就是您所想的吗?最初,我有一个完整图的数据框架:x,y-坐标,一个图的graph_id-id,我想使用成员资格
和快速贪婪社区
函数将这些图拆分为几个子图。输入是一个图(从子数据帧创建),输出是每个点的子图id(表示为初始数据帧中的一行),它解释了您希望如何对数据进行分组,而不是希望帧的外观。如果输出的行比输入的多,我不知道如何添加“初始数据帧中的行”。您是否可以更改示例数据,使其包括(例如)3个不同的组和每个组3-4行,并显示该示例输入的输出结果?不清楚的时候很难谈论。
data <-
data %>%
mutate(id = {.} %>%
group_by(graph_id) %>%
select(x, y) %>%
do(a = dist(.) %>%
as.matrix() %>%
melt(varnames = c("row", "col")) %>%
mutate(weight = 1/value *100) %>%
filter(row < col) %>%
rename(from = row,
to = col) %>%
graph_from_data_frame(directed = F) %>%
fastgreedy.community() %>%
membership()) %>%
.['a'] %>%
unlist() %>%
unname())