我有这个矩阵。
mat<-c("A","NODATA","NODATA","NODATA","A","B","C","NODATA","A","B","C","NODATA","D","E","A","NODATA","D","B","A","NODATA")
mat2 <- matrix(mat<-c("A","NODATA","NODATA","NODATA","A","B","C","NODATA","A","B","C","NODATA","D","E","A","NODATA","D","B","A","NODATA"),nrow = 4,ncol = 5)
mat3<-t(mat2)
colnames(mat3)<-c("col1","col2","col3","col4")
mat3
col1 col2 col3 col4
[1,] "A" "NODATA" "NODATA" "NODATA"
[2,] "A" "B" "C" "NODATA"
[3,] "A" "B" "C" "NODATA"
[4,] "D" "E" "A" "NODATA"
[5,] "D" "B" "A" "NODATA"
我想按以下R中的方式更改数据框。
A B C D E NODATA
1 0 0 0 0 1
1 1 1 0 0 1
1 1 1 0 0 1
1 0 0 1 1 1
1 1 0 1 1 1
你知道什么主意吗?
谢谢。
library(dplyr)
data.frame(rows=seq_len(nrow(mat3))[row(mat3)], values=c(mat3)) %>%
mutate(a=1) %>%
pivot_wider(id_cols="rows", names_from="values", values_from="a", values_fn=list(a=length)) %>%
mutate_all(~ +!is.na(.)) %>%
select(-rows) %>%
select(sort(colnames(.)))
# # A tibble: 5 x 6
# A B C D E NODATA
# <int> <int> <int> <int> <int> <int>
# 1 1 0 0 0 0 1
# 2 1 1 1 0 0 1
# 3 1 1 1 0 0 1
# 4 1 0 0 1 1 1
# 5 1 1 0 1 0 1
data.frame(...)
建议的第一行(https://stackoverflow.com/a/26838774/3358272。