在某些条件下连接字符串的平均值
我希望在具有某些条件的连接字符串上平均值。这是我的数据:在某些条件下连接字符串的平均值
id path events
1 a, b 2, 3
2 c, a 3, 4
3 b 5
我想借此行的平均水平是不有一个特定的路径,例如谁没有C(即1行3)行的平均值(2 + 3 + 5)/ 3 = 3.33
和类似的其他人,所以我的期望的输出将是
path avg
a 5
b 3.5
c 3.33
之前,我试图不连接数据
和它的工作
output <- sapply(as.character(unique(df$path)),
function(x) mean(subset(df, !path %in% x)$events))
但不能想出一个主意,这种情况
这是我的数据
mydata <- data.frame(id =c(1,2,3),
path= c("a,b", "c,a", "b"),
events =c (("2,3"), ("3,4"), ("5")))
这里有一个tidyverse方法:
library(tidyverse)
mydata %>% separate_rows(path, events, convert = TRUE) %>% # unnest rows
group_by(path) %>% # set grouping
summarise(avg = mean(.$events[!.$id %in% id])) # summarize groups
## # A tibble: 3 × 2
## path avg
## <chr> <dbl>
## 1 a 5.000000
## 2 b 3.500000
## 3 c 3.333333
注意总结使用.$[column name]
指到整个列,并且只需[column name]
来引用该组的值。
这很奇怪,是否给你一个错误信息?你实际上可以直接使用'library(tidyr); library(dplyr)',if – alistaire
如果您的路径和事件编号在行中不相同,您需要修改@alistaire解决方案,而不是'separate_rows(events,convert = TRUE)''使用'separate_rows(path ,convert = TRUE)%>%separate_rows(events,convert = TRUE)' – kwicher
@alistaire它很奇怪,最后我成功安装了这个软件包,但是你的代码给了我这个错误错误(x,ties.method =“first” ,na.last =“保持”): 参数“x”丢失,wi没有默认 – MFR
您可以使用'tidyr :: separate_rows'来取消您的数据,但我不确定遵循了您的汇总逻辑。 – alistaire
@alistaire谢谢('我正在试验这个。我的summeriziation逻辑在上面举例说明,例如c,我们把包含c的行放在一边,所以我们删除第2行(有c)并保留第1行和第3行,第1行和第3行中的所有事件是2 + 3 + 5/3 = 3.33 – MFR