您如何拆分列并从中创建关系?
How do you split a column and create a relation from them?
我是一个自学的程序员,比较菜鸟
我正在尝试在向量中的组之间创建关系。
下面是我用来实现我的目标的代码。
必须有一种更快或通用的方法来实现此目标。
library(tidyverse)
mydf <- tibble(nums = seq(0,9, by = 1),
ltrs = rep(c("a","b"), each = 5))
myspl <- split(mydf, mydf$ltrs)
ltrsA <- myspl[["a"]]$ltrs
ltrsB <- myspl[["b"]]$ltrs
numsA <- myspl[["a"]]$nums
numsB <- myspl[["b"]]$nums
newdf <- tibble(numsA, ltrsA, numsB, ltrsB)
newdf
ggplot(newdf, aes(numsA, numsB)) + geom_point()
感谢您的宝贵时间。
听起来像是 dplyr
的 bind_cols
的任务。
library(tidyverse)
mydf <- tibble(nums = seq(0,9, by = 1),
ltrs = rep(c("a","b"), each = 5))
myspl <- split(mydf, mydf$ltrs)
bind_cols(myspl)
# A tibble: 5 x 4
nums ltrs nums1 ltrs1
<dbl> <chr> <dbl> <chr>
1 0 a 5 b
2 1 a 6 b
3 2 a 7 b
4 3 a 8 b
5 4 a 9 b
我们也可以更改bind_cols
之后的列名。
myspl %>%
bind_cols() %>%
setNames(paste0(names(mydf), rep(c("A", "B"), each = 2)))
# A tibble: 5 x 4
numsA ltrsA numsB ltrsB
<dbl> <chr> <dbl> <chr>
1 0 a 5 b
2 1 a 6 b
3 2 a 7 b
4 3 a 8 b
5 4 a 9 b
您也可以这样做:
library(tidyverse)
mydf %>%
group_by(ltrs) %>%
mutate(ID = 1:n()) %>%
spread(ltrs, nums) %>%
ggplot(aes(a, b)) + geom_point()
结果:
# A tibble: 5 x 3
ID a b
* <int> <dbl> <dbl>
1 1 0 5
2 2 1 6
3 3 2 7
4 4 3 8
5 5 4 9
我是一个自学的程序员,比较菜鸟
我正在尝试在向量中的组之间创建关系。 下面是我用来实现我的目标的代码。
必须有一种更快或通用的方法来实现此目标。
library(tidyverse)
mydf <- tibble(nums = seq(0,9, by = 1),
ltrs = rep(c("a","b"), each = 5))
myspl <- split(mydf, mydf$ltrs)
ltrsA <- myspl[["a"]]$ltrs
ltrsB <- myspl[["b"]]$ltrs
numsA <- myspl[["a"]]$nums
numsB <- myspl[["b"]]$nums
newdf <- tibble(numsA, ltrsA, numsB, ltrsB)
newdf
ggplot(newdf, aes(numsA, numsB)) + geom_point()
感谢您的宝贵时间。
听起来像是 dplyr
的 bind_cols
的任务。
library(tidyverse)
mydf <- tibble(nums = seq(0,9, by = 1),
ltrs = rep(c("a","b"), each = 5))
myspl <- split(mydf, mydf$ltrs)
bind_cols(myspl)
# A tibble: 5 x 4
nums ltrs nums1 ltrs1
<dbl> <chr> <dbl> <chr>
1 0 a 5 b
2 1 a 6 b
3 2 a 7 b
4 3 a 8 b
5 4 a 9 b
我们也可以更改bind_cols
之后的列名。
myspl %>%
bind_cols() %>%
setNames(paste0(names(mydf), rep(c("A", "B"), each = 2)))
# A tibble: 5 x 4
numsA ltrsA numsB ltrsB
<dbl> <chr> <dbl> <chr>
1 0 a 5 b
2 1 a 6 b
3 2 a 7 b
4 3 a 8 b
5 4 a 9 b
您也可以这样做:
library(tidyverse)
mydf %>%
group_by(ltrs) %>%
mutate(ID = 1:n()) %>%
spread(ltrs, nums) %>%
ggplot(aes(a, b)) + geom_point()
结果:
# A tibble: 5 x 3
ID a b
* <int> <dbl> <dbl>
1 1 0 5
2 2 1 6
3 3 2 7
4 4 3 8
5 5 4 9