我有一个数据集(左),我想将其更改为格式(右): 我的问题是如何从IDPRODUCT(如果重复仅创建一列)创建列,而IDBILL如果左侧表中的值将设置为1,否则设置为0。
请使用R帮助我解决这种情况。我尝试使用(reshape2,tidyr)的一些技巧,但我做不到。
答案 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