[英]create data frame based on unique values of two variables in R
我想基於另一個數據框的兩個唯一值創建一個新的數據框。
id <- c("A", "B", "B", "C")
st.name <- c("TX", "TX", "CA", "CA")
type <- c(21, 26, 29, 24)
DF <- data.frame(id, st.name, type)
print(DF)
id st.name type
A TX 21
B TX 26
B CA 29
C CA 24
我想基於id和st.type的唯一值創建一個新的數據框。 結果如下所示:
new_id <- c("ATX", "ACA", "BTX", "BCA", "CTX", "CCA")
new_type <- c(21, NA, 26, 29, NA, 24)
DF2 <- data.frame(new_id, new_type)
print(DF2)
new_id new_type
ATX 21
ACA NA
BTX 26
BCA 29
CTX NA
CCA 24
我在以前的項目中使用過dcast
,但不確定如何在此處合並該功能。
我們可以與tidyr
一起complete
並unite
library(tidyr)
complete(DF, id, st.name) %>%
unite(new_id, id, st.name, sep = '')
或使用base R
,我們可以通過expand.grid
, merge
和paste
獲得預期的輸出
transform(merge(expand.grid(lapply(DF[1:2], unique)),
DF, all.x=TRUE), id = paste0(id, st.name))[-2]
或帶有CJ
的data.table
選項(在評論中由@Frank提及)
library(data.table)
setDT(DF)[CJ(id = id, st.name = st.name, unique=TRUE), on=.(id, st.name)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.