我想基于另一个数据框中的两个唯一值创建一个新的数据框。
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
,但我不确定如何在此处合并该函数。
答案 0 :(得分:4)
我们可以使用action_b
complete
和unite
执行此操作
tidyr
或者使用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]
选项data.table
(@Frank在评论中提及)
CJ