R Grouped Data Frame:函数将单个值与组的其他值相关联
R Grouped Data Frame: Function relates single value to the other values of the group
在分组数据框中,我想应用一个函数,将实际行中的一个值与组(和同一列)中除当前行中的值之外的所有其他值相关联。这将导致单值新变量。因此,如果该组由 c(1,2,3,4,5) 组成,我想有一个新变量: c(fun(1,c(2,3), fun(2, c(1,3 ), 乐趣 (3, c(1,2))
我的小组没有类似的规模。但是尝试了这么久,我总是收到有趣的值,例如零或错误。
示例代码:
set.seed(3)
dat <- data_frame(a=1:10,value=round(runif(10),2),group=c(1,1,1,2,2,3,3,3,3,4))
# one possible function
dif.dist <- function(x1, x2) sum(abs(x1 - x2))/(length(x2)-1)
# with this, sometimes the grouping gets lost in "vec" and i receive zeros
x <- dat%>%
group_by(group)%>%
mutate(vec= list(value))%>%
mutate(dif = dif.dist(unique(value),unlist(vec)[unlist(vec)!=value]))%>%
ungroup()
# another try with plyr, that returns only 0
dat <- ddply(dat, .(group), mutate, dif=dif.dist1(value[a==a],value[value!=value[a==a]]))
但功能有效
dif.dist(dat$value[1],dat$value[2:3])
[1] 0.85
稍后,我需要它来接收与每个参与者相关的大量变量的距离矩阵。非常感谢您的帮助!
一个选项是在按 'group' 分组后遍历行序列,并根据索引
对 'value' 的元素进行子集化
library(dplyr)
library(purrr)
out <- dat %>%
group_by(group) %>%
mutate(dif = map_dbl(row_number(), ~ dif.dist(value[.x], value[-.x])))
head(out, 2)
# A tibble: 2 x 4
# Groups: group [1]
# a value group dif
# <int> <dbl> <dbl> <dbl>
#1 1 0.17 1 0.85
#2 2 0.81 1 1.07
在分组数据框中,我想应用一个函数,将实际行中的一个值与组(和同一列)中除当前行中的值之外的所有其他值相关联。这将导致单值新变量。因此,如果该组由 c(1,2,3,4,5) 组成,我想有一个新变量: c(fun(1,c(2,3), fun(2, c(1,3 ), 乐趣 (3, c(1,2)) 我的小组没有类似的规模。但是尝试了这么久,我总是收到有趣的值,例如零或错误。
示例代码:
set.seed(3)
dat <- data_frame(a=1:10,value=round(runif(10),2),group=c(1,1,1,2,2,3,3,3,3,4))
# one possible function
dif.dist <- function(x1, x2) sum(abs(x1 - x2))/(length(x2)-1)
# with this, sometimes the grouping gets lost in "vec" and i receive zeros
x <- dat%>%
group_by(group)%>%
mutate(vec= list(value))%>%
mutate(dif = dif.dist(unique(value),unlist(vec)[unlist(vec)!=value]))%>%
ungroup()
# another try with plyr, that returns only 0
dat <- ddply(dat, .(group), mutate, dif=dif.dist1(value[a==a],value[value!=value[a==a]]))
但功能有效
dif.dist(dat$value[1],dat$value[2:3])
[1] 0.85
稍后,我需要它来接收与每个参与者相关的大量变量的距离矩阵。非常感谢您的帮助!
一个选项是在按 'group' 分组后遍历行序列,并根据索引
对 'value' 的元素进行子集化library(dplyr)
library(purrr)
out <- dat %>%
group_by(group) %>%
mutate(dif = map_dbl(row_number(), ~ dif.dist(value[.x], value[-.x])))
head(out, 2)
# A tibble: 2 x 4
# Groups: group [1]
# a value group dif
# <int> <dbl> <dbl> <dbl>
#1 1 0.17 1 0.85
#2 2 0.81 1 1.07