将数据框中的列/变量附加到新变量

时间:2017-05-05 14:46:47

标签: r

我一直在寻找如何做到这一点,但似乎无法找到我的问题的例子。我对R很新,但我非常熟悉SAS,所以我想问一下如何在R中完成相当于这个SAS代码。

我有一个数据集(同期群)和两个变量(last_pre_cv_prob,first_post_cv_prob),我想创建一个有两个变量的新数据集,第一个是前面设置的两个变量(cv_prob),第二个是一个变量,表示数据来自哪个变量(时间)。所以在SAS中我会这样做:

data post_cv;
    set cohort(keep=last_pre_cv_prob rename=(last_pre_cv_prob=cv_prob) in=a)
    cohort(keep=first_post_cv_prob rename=(first_post_cv_prob=cv_prob) in=b);
    if b then time='post';
    if a then time='pre';
run;

我如何在R中这样做?

谢谢!

编辑:

post_cv2 %>% gather(column, prob, last_pre_cv_prob, first_post_cv_prob)

Error in eval(expr, envir, enclos) : object 'last_pre_cv_prob' not found

然后我尝试了:

post_cv2 %>% gather(column, prob, liver_cv$last_pre_cv_prob, 
liver_cv$first_post_cv_prob)

Error: All select() inputs must resolve to integer column positions.
The following do not:
*  liver_cv$last_pre_cv_prob
*  liver_cv$first_post_cv_prob

编辑:

第二个问题解决了,我不得不添加小引号

post_cv2 <- post_cv %>% 
  gather(time, cv_prob, `liver_cv$last_pre_cv_prob`, 
`liver_cv$first_post_cv_prob`) 

编辑:

解决!

library(tidyverse)
library(stringr)

post_cv <- data_frame(pre = liver_cv$last_pre_cv_prob, post = liver_cv$first_post_cv_prob)

post_cv2 <- post_cv %>% 
  gather(time, cv_prob, pre, post) 

1 个答案:

答案 0 :(得分:2)

您只需收集2列并提取时间信息:


library(tidyverse)

cohort <- data_frame(last_pre_cv_prob = runif(5),
                     first_post_cv_prob = runif(5))

cohort_2 <- cohort %>% 
  gather(time, cv_prob, last_pre_cv_prob, first_post_cv_prob) %>%
  mutate(time = str_extract(time, "post|pre"))

cohort_2
#> # A tibble: 10 × 2
#>     time    cv_prob
#>    <chr>      <dbl>
#> 1    pre 0.64527372
#> 2    pre 0.55086818
#> 3    pre 0.05882369
#> 4    pre 0.19626147
#> 5    pre 0.05933594
#> 6   post 0.25564350
#> 7   post 0.01908338
#> 8   post 0.84901506
#> 9   post 0.07761842
#> 10  post 0.29019190