将行更改为R中具有是/否(1/0)值的列

时间:2018-08-17 09:59:29

标签: r

我有一个数据集(左),我想将其更改为格式(右): 我的问题是如何从IDPRODUCT(如果重复仅创建一列)创建列,而IDBILL如果左侧表中的值将设置为1,否则设置为0。

view picture

请使用R帮助我解决这种情况。我尝试使用(reshape2,tidyr)的一些技巧,但我做不到。

3 个答案:

答案 0 :(得分:0)

您可以尝试:

Right_df<- as.data.frame(t(Left_df))

答案 1 :(得分:0)

此解决方案适用于您的示例...

componentWillReceiveProps(nextProps){
  const nextFiltered = nextProps.store.posts.filter(your filtering code here);
  this.setState({currentlyDisplayed: nextFiltered});
}

分步操作:

1)跨列传播变量,但是在library(tidyverse) library(sjmisc) d <- tibble( IDBILL = c(111, 111, 112, 113, 113), IDPRODUCT = c("ABC123", "ABC124", "BCH134", "ABC123", "GDF345"), ) d %>% tidyr::spread(key = IDPRODUCT, value = IDPRODUCT) %>% sjmisc::rec_if(is.character, rec = "NA=0;else=1", append = F) %>% tibble::add_column(IDBILL = unique(d$IDBILL), .before = 1) #> # A tibble: 3 x 5 #> IDBILL ABC123_r ABC124_r BCH134_r GDF345_r #> <dbl> <dbl> <dbl> <dbl> <dbl> #> 1 111 1 1 0 0 #> 2 112 0 0 1 0 #> 3 113 1 0 0 1 key相同的情况下,由于值重复:value将引发以下错误:错误:重复行(1、2),(4、5)的标识符

tidyr::spread(key = IDPRODUCT, value = IDPRODUCT)

2)将d %>% tidyr::spread(key = IDPRODUCT, value = IDPRODUCT) #> # A tibble: 3 x 5 #> IDBILL ABC123 ABC124 BCH134 GDF345 #> <dbl> <chr> <chr> <chr> <chr> #> 1 111 ABC123 ABC124 <NA> <NA> #> 2 112 <NA> <NA> BCH134 <NA> #> 3 113 ABC123 <NA> <NA> GDF345 编码为0,将所有其他值(NA)编码为1-但仅用于字符向量(否则,列else将也要重新编码)。请注意,IDBILL就像rec_if(),删除所有其他select_if()不适用的列。

.predicate

3)...所以我们需要添加回ID列:

d %>% 
  tidyr::spread(key = IDPRODUCT, value = IDPRODUCT) %>% 
  sjmisc::rec_if(is.character, rec = "NA=0;else=1", append = F)
#> # A tibble: 3 x 4
#>   ABC123_r ABC124_r BCH134_r GDF345_r
#>      <dbl>    <dbl>    <dbl>    <dbl>
#> 1        1        1        0        0
#> 2        0        0        1        0
#> 3        1        0        0        1

答案 2 :(得分:0)

使用dcast的data.table方法

library(data.table)

d <- data.table(
  IDBILL = c(111, 111, 112, 113, 113),
  IDPRODUCT = c("ABC123", "ABC124", "BCH134", "ABC123", "GDF345")
)

dcast(d,IDBILL~IDPRODUCT,fill = 0,fun.aggregate = length)

#>    IDBILL ABC123 ABC124 BCH134 GDF345
#> 1:    111      1      1      0      0
#> 2:    112      0      0      1      0
#> 3:    113      1      0      0      1