2016-12-06 13 views
1

私はこのようなデータセットを持っている:形状変更データ

id value1 value2 
1 A  True 
2 B  False 
3 A  True 
4 C  True 

私は複数の値を持つ列を識別し、複数の列に変換したいですR.でTrueまたはFalseの値と結果は次のようになります。

id value1.A value1.B value1.C value2 
1  True  False False True 
2  False True False False 
3  True  False False True 
4  False True False True 

私はこのためにdcast使用するかどうかはわかりません。私は自分自身で関数を書いたが、それは遅すぎる。そのためのコードはここにある:

library(dplyr) 
library(tidyr) 
df %>% 
    mutate(value = TRUE) %>% 
    spread(value1, value, fill = FALSE, sep = '.') 

出力::あなたはこのようtidyr使用することができます

to_multiple_columns <- function(col,attr_name){ 
elements <- names(table(col)) 
drops <- c("","True","False") 
elements <- elements[ !elements %in% drops] 
new_df <- data.frame(col) # to define data frame with nrows,ncols 
if(length(elements) > 0){ 
new_attr_names <- paste(attr_name,elements,sep = ".") 
    for(j in 1:length(new_attr_names)){ 
     new_df <- data.frame(new_df,grepl(elements[j],col)) 
    } 
    drops <- c("col") #drop original col 
    new_df <- new_df[,!(names(new_df) %in% drops)] 
    names(new_df) <- new_attr_names 
    } 
    return(new_df) 
} 

答えて

2

ベースRで

id value2 value1.A value1.B value1.C 
1 1 True  TRUE FALSE FALSE 
2 2 False FALSE  TRUE FALSE 
3 3 True  TRUE FALSE FALSE 
4 4 True FALSE FALSE  TRUE 
+0

を使用することができます。 NAはフィルで置き換えられます。 – Bhail

0

、あなたはxtabsを使用することができます。

value1のすべての要素が表示されない場合は、factorにキャストしてください。

data.raw <- "id value1 value2 
1 A  True 
2 B  False 
3 A  True 
4 C  True" 

data <- read.table(textConnection(data.raw), header = T) 

data$value2 <- data$value2 == "True" 

xtabs(value2 ~ id + value1, data = data) 
#> value1 
#> id A B C 
#> 1 1 0 0 
#> 2 0 0 0 
#> 3 1 0 0 
#> 4 0 0 1 

大量のデータの場合は、スパース行列を生成することもできます。

xtabs(value2 ~ id + value1, data = data, sparse = T) 
2

私たちは、これはtidyverseの簡単な使用であるdcast

library(data.table) 
dcast(setDT(df1)[, value:=TRUE], id+value2~value1, value.var="value", fill = FALSE) 
# id value2  A  B  C 
#1: 1 True TRUE FALSE FALSE 
#2: 2 False FALSE TRUE FALSE 
#3: 3 True TRUE FALSE FALSE 
#4: 4 True FALSE FALSE TRUE 
関連する問題