簡體   English   中英

按列中的值復制行,將R中的值更改為1或0

[英]Replicate rows by value in column, change values to 1 or 0, in R

我的數據結構為:

A B C D 

3 2 1 1 

我希望它重組為

A B C D

1 0 0 0

1 0 0 0

1 0 0 0

0 1 0 0

0 1 0 0

0 0 1 0

0 0 0 1

關於如何在R中執行此操作有任何想法嗎? 非常感謝。

如果輸入是data.frame,則可以執行以下操作:

coln <- seq_along(df)
m = do.call(rbind, lapply(coln, function(i) {t(replicate(df[1,i], coln == i))})) +0

這將導致如下所示的矩陣:

#     [,1] [,2] [,3] [,4]
#[1,]    1    0    0    0
#[2,]    1    0    0    0
#[3,]    1    0    0    0
#[4,]    0    1    0    0
#[5,]    0    1    0    0
#[6,]    0    0    1    0
#[7,]    0    0    0    1

然后,您可以根據需要將其轉換為data.frame或設置列名稱。

這是使用dcast的選項

library(data.table)
nm1 <- rep(names(df1), unlist(df1))
dcast(data.table(nm1, v1 = seq_along(nm1)), v1 ~ nm1, length)[, v1 := NULL][]
#   A B C D
#1: 1 0 0 0
#2: 1 0 0 0
#3: 1 0 0 0
#4: 0 1 0 0
#5: 0 1 0 0
#6: 0 0 1 0
#7: 0 0 0 1

或者在創建'nm1'之后,使用base R model.matrix

model.matrix(~-1 + nm1)

或一行

model.matrix(~ -1 + rep(names(df1), unlist(df1)))

並更改列名

數據

df1 <- data.frame(A = 3, B = 2, C = 1, D = 1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM