R 根据值获取所有可能的总和和输出列表
我有一个包含两列的数据框:R 根据值获取所有可能的总和和输出列表,r,combinations,R,Combinations,我有一个包含两列的数据框:LOOKUP,其中包含一个索引编号,另一列,VALUE中包含一个与该编号关联的字符串: LOOKUP VALUE 1000 Apple 100 Banana 10 Grape 1 Orange 以R代码显示如下: dat <- data.frame(LOOKUP= c(1000, 100, 10, 1), VALUE = c("Apple", "Banana", "Gr
LOOKUP
,其中包含一个索引编号,另一列,VALUE
中包含一个与该编号关联的字符串:
LOOKUP VALUE
1000 Apple
100 Banana
10 Grape
1 Orange
以R代码显示如下:
dat <- data.frame(LOOKUP= c(1000, 100, 10, 1),
VALUE = c("Apple", "Banana", "Grape", "Orange"))
一种涉及
purr
、tibble
、dplyr
和tidyr
的解决方案可以是:
map(.x = 1:nrow(dat), ~ combn(dat$VALUE, .x, paste, collapse = ",") %>%
enframe()) %>%
bind_rows() %>%
rowid_to_column() %>%
separate_rows(value) %>%
left_join(dat, by = c("value" = "VALUE")) %>%
group_by(rowid) %>%
summarise(comb = toString(value),
sum = sum(LOOKUP))
rowid comb sum
<int> <chr> <dbl>
1 1 Apple 1000
2 2 Banana 100
3 3 Grape 10
4 4 Orange 1
5 5 Apple, Banana 1100
6 6 Apple, Grape 1010
7 7 Apple, Orange 1001
8 8 Banana, Grape 110
9 9 Banana, Orange 101
10 10 Grape, Orange 11
11 11 Apple, Banana, Grape 1110
12 12 Apple, Banana, Orange 1101
13 13 Apple, Grape, Orange 1011
14 14 Banana, Grape, Orange 111
15 15 Apple, Banana, Grape, Orange 1111
map(.x=1:nrow(dat),~combn(dat$VALUE,.x,粘贴,折叠=“,”)%>%
enframe())%>%
绑定_行()%>%
rowid_到_列()%>%
单独的_行(值)%>%
左联合(dat,by=c(“值”=“值”))%>%
分组依据(rowid)%>%
总结(comb=toString(值),
总和=总和(查找))
罗维德梳和
1苹果1000
2香蕉100
3葡萄10
4橙色1
5苹果,香蕉1100
6苹果,葡萄1010
7苹果,橙色1001
8香蕉、葡萄110
香蕉,橘子101
10葡萄,橙11
11苹果、香蕉、葡萄1110
12苹果、香蕉、橘子1101
13苹果、葡萄、橘子1011
14香蕉、葡萄、橘子111
15苹果、香蕉、葡萄、橘子1111
样本数据:
dat <- data.frame(LOOKUP= c(1000, 100, 10, 1),
VALUE = c("Apple", "Banana", "Grape", "Orange"),
stringsAsFactors = FALSE)
dat相关:非常感谢!我正在尝试运行您的代码,但收到以下错误消息:“在导入数据时,我使用了stringsAsFactors=FALSE
,在类(out)中出错。”。请看更新后的帖子。你是一个传奇人物。多谢。只是提醒一下,我认为需要将“Tibble”添加到所需库的列表中。我需要为enframe加载它。再次感谢:“你是对的,我一直认为它是 DPLYR <代码>的一部分:)很高兴它有帮助!
dat <- data.frame(LOOKUP= c(1000, 100, 10, 1),
VALUE = c("Apple", "Banana", "Grape", "Orange"),
stringsAsFactors = FALSE)