您如何拆分列并从中创建关系?

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()

感谢您的宝贵时间。

听起来像是 dplyrbind_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