基于R中两个变量的唯一值创建数据帧
我想基于另一个数据帧的两个唯一值创建一个新的数据帧基于R中两个变量的唯一值创建数据帧,r,data.table,dplyr,uniqueidentifier,reshape2,R,Data.table,Dplyr,Uniqueidentifier,Reshape2,我想基于另一个数据帧的两个唯一值创建一个新的数据帧 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
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来实现这一点
或者使用base R,我们可以通过expand.grid、merge和paste获得预期的输出
或注释中@Frank提到的带有CJ的data.table选项
library(data.table)
setDT(DF)[CJ(id = id, st.name = st.name, unique=TRUE), on=.(id, st.name)]
我们可以用tidyr的完整和团结来实现这一点
或者使用base R,我们可以通过expand.grid、merge和paste获得预期的输出
或注释中@Frank提到的带有CJ的data.table选项
library(data.table)
setDT(DF)[CJ(id = id, st.name = st.name, unique=TRUE), on=.(id, st.name)]
美丽的注意:unite使用sep参数,因此unitenew_id,id,st.name,sep=将不会像OP的更新示例中那样给出分隔符。我猜你合并的data.table类似物类似于setDTDF[CJid=id,st.name=st.name,unique=TRUE,on=.id,st.name]Beautiful。注意:unite使用sep参数,因此unitenew_id,id,st.name,sep=将不会像OP的更新示例中那样给出分隔符。或者我们登陆的任何sep。我猜用于合并的data.table模拟类似于setDTDF[CJid=id,st.name=st.name,unique=TRUE,on=.id,st.name]太棒了!谢谢@Akrunnazing!谢谢@akrun
library(data.table)
setDT(DF)[CJ(id = id, st.name = st.name, unique=TRUE), on=.(id, st.name)]