2017-10-27 11 views
2

私は自己学習プログラマーであり、私はかなり初心者です。どのようにして列を分割し、列を作成しますか?

ベクトル内のグループ間の関係を作成しようとしています。 以下は私の目標を達成するために使用しているコードです。

この目標を達成するには、より迅速または一般的な方法が必要です。

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

ありがとうございます。

+1

newdfは(myspl、 'CBIND') 'do.call基本的には'右? – rawr

+0

あなたのソリューションは機能します!ありがとうございました! –

答えて

2

bind_colsのタスクのように聞こえます。dplyrです。

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 
2
あなたもこれを行うことができます

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 

enter image description here

関連する問題