Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于R中两个变量的唯一值创建数据帧_R_Data.table_Dplyr_Uniqueidentifier_Reshape2 - Fatal编程技术网

基于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)]