按序列长度扩展数据框中的行
Expand rows in data frame by length of sequence
我有这样一个数据框
mydf <- data.frame(x = c("a", "b", "q"),
y = c("c", "d", "r"),
min = c(2, 5, 3),
max = c(4,6,7))
x y min max
a c 2 4
b d 5 6
q r 3 7
我想用一个简单的函数将它扩展到这个
mydf_expanded <- data.frame(x = c(rep("a",3), rep("b",2), rep("q",5)),
y = c(rep("c",3), rep("d",2), rep("r",5)),
min_to_max = c(2:4,5:6,3:7))
x y min_to_max
a c 2
a c 3
a c 4
b d 5
b d 6
q r 3
q r 4
q r 5
q r 6
q r 7
这基本上是试图将 mydf
的每一行 length(mydf$min:mydf:max)
扩展 mydf
。
但我还想添加 min_to_max
列,即每一行中的序列 mydf$min:mydf:max
。
我知道这个函数可以根据您指定的“计数”进行扩展
library(splitstackshape)
mydf_expand = expandRows(mydf, "count")
但这并没有让我找到我的解决方案。
请帮忙!谢谢!
df <- data.frame(x = c("a", "b", "q"),
y = c("c", "d", "r"),
min = c(2, 5, 3),
max = c(4,6,7))
library(tidyverse)
df %>%
rowwise() %>%
transmute(x, y, all = list(seq(min, max))) %>%
unnest_longer(all)
#> # A tibble: 10 x 3
#> x y all
#> <chr> <chr> <int>
#> 1 a c 2
#> 2 a c 3
#> 3 a c 4
#> 4 b d 5
#> 5 b d 6
#> 6 q r 3
#> 7 q r 4
#> 8 q r 5
#> 9 q r 6
#> 10 q r 7
由 reprex package (v1.0.0)
于 2021 年 3 月 11 日创建
data.table
library(data.table)
setDT(df)
df$all <- apply(df[, c(3,4)], 1, function(x) seq(x[1], x[2]))
df[, list(all = unlist(all)), by = list(x, y)]
#> x y all
#> 1: a c 2
#> 2: a c 3
#> 3: a c 4
#> 4: b d 5
#> 5: b d 6
#> 6: q r 3
#> 7: q r 4
#> 8: q r 5
#> 9: q r 6
#> 10: q r 7
由 reprex package (v1.0.0)
于 2021 年 3 月 11 日创建
我有这样一个数据框
mydf <- data.frame(x = c("a", "b", "q"),
y = c("c", "d", "r"),
min = c(2, 5, 3),
max = c(4,6,7))
x y min max
a c 2 4
b d 5 6
q r 3 7
我想用一个简单的函数将它扩展到这个
mydf_expanded <- data.frame(x = c(rep("a",3), rep("b",2), rep("q",5)),
y = c(rep("c",3), rep("d",2), rep("r",5)),
min_to_max = c(2:4,5:6,3:7))
x y min_to_max
a c 2
a c 3
a c 4
b d 5
b d 6
q r 3
q r 4
q r 5
q r 6
q r 7
这基本上是试图将 mydf
的每一行 length(mydf$min:mydf:max)
扩展 mydf
。
但我还想添加 min_to_max
列,即每一行中的序列 mydf$min:mydf:max
。
我知道这个函数可以根据您指定的“计数”进行扩展
library(splitstackshape)
mydf_expand = expandRows(mydf, "count")
但这并没有让我找到我的解决方案。 请帮忙!谢谢!
df <- data.frame(x = c("a", "b", "q"),
y = c("c", "d", "r"),
min = c(2, 5, 3),
max = c(4,6,7))
library(tidyverse)
df %>%
rowwise() %>%
transmute(x, y, all = list(seq(min, max))) %>%
unnest_longer(all)
#> # A tibble: 10 x 3
#> x y all
#> <chr> <chr> <int>
#> 1 a c 2
#> 2 a c 3
#> 3 a c 4
#> 4 b d 5
#> 5 b d 6
#> 6 q r 3
#> 7 q r 4
#> 8 q r 5
#> 9 q r 6
#> 10 q r 7
由 reprex package (v1.0.0)
于 2021 年 3 月 11 日创建data.table
library(data.table)
setDT(df)
df$all <- apply(df[, c(3,4)], 1, function(x) seq(x[1], x[2]))
df[, list(all = unlist(all)), by = list(x, y)]
#> x y all
#> 1: a c 2
#> 2: a c 3
#> 3: a c 4
#> 4: b d 5
#> 5: b d 6
#> 6: q r 3
#> 7: q r 4
#> 8: q r 5
#> 9: q r 6
#> 10: q r 7
由 reprex package (v1.0.0)
于 2021 年 3 月 11 日创建