Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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/4/oop/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 - Fatal编程技术网

R 如何匹配和划分

R 如何匹配和划分,r,data.table,R,Data.table,鉴于以下数据表: df1 <- data.table(V1=c("A","C","D","B"),V2=c(0,2,0,2),V3=c(2,0,2,0)) df2 <- data.table(V1=c("A","B","C","D"),V2=c(4,2,4,2)) df1 df2 > df1 V1 V2 V3 1: A 0 2 2: C 2 0 3: D 0 2 4: B 2 0 > df2 V1 V2 1: A 4 2: B

鉴于以下数据表:

df1 <- data.table(V1=c("A","C","D","B"),V2=c(0,2,0,2),V3=c(2,0,2,0))
df2 <- data.table(V1=c("A","B","C","D"),V2=c(4,2,4,2))
df1
df2
> df1
   V1 V2 V3
1:  A  0  2
2:  C  2  0
3:  D  0  2
4:  B  2  0
> df2
   V1 V2
1:  A  4
2:  B  2
3:  C  4
4:  D  2
你能帮帮我吗


非常感谢。

带有
数据。表

setkey(df1, V1)
df1[df2,.(V1,V2=V2/i.V2, V3=V3/i.V2)]
#   V1  V2  V3
#1:  A 0.0 0.5
#2:  B 1.0 0.0
#3:  C 0.5 0.0
#4:  D 0.0 1.0

有关更多选项,请参见注释。

带有
数据。表

setkey(df1, V1)
df1[df2,.(V1,V2=V2/i.V2, V3=V3/i.V2)]
#   V1  V2  V3
#1:  A 0.0 0.5
#2:  B 1.0 0.0
#3:  C 0.5 0.0
#4:  D 0.0 1.0

有关更多选项,请参见注释。

这将适用于您的示例,尽管它不能扩展到更多列。您的实际使用是否使用两个具有相同列名的表

df3<-merge(df1,df2,"V1")[,list(V2=V2.x/V2.y, V3=V3/V2.y),by=V1]

这将适用于您的示例,尽管它不能扩展到更多的列。您的实际使用是否使用两个具有相同列名的表

df3<-merge(df1,df2,"V1")[,list(V2=V2.x/V2.y, V3=V3/V2.y),by=V1]


我添加了
data.table
标记,因为您正在使用此包创建代码。下次别忘了添加标签,以便让关注您的帖子的超级用户(不仅仅是他们)能够看到您的帖子。我已经添加了
data.table
标签,因为您正在使用此软件包创建代码。下次别忘了添加标签,以使您的帖子对关注它的超级用户(不仅仅是他们)可见。
df1[df2,(V2=V2/i.V2,V3=V3/i.V2),by=.EACHI]
df1[df2,(V1,V2=V2/i.V2,V3=V3/i.V2)]
无需使用
by=.EACHI
,也首选通过引用分配,我会选择
df1[df2,`:=`(V2=V2/i.V2,V3=V3/i.V2)]
@davidernburg是的,但这修改了
df1
,这可能不是我们想要的。@Frank我读到OP想要通过一个键将
df1
中的任何值与
df2
中相应的值进行匹配。这听起来就像左连接,所以我看不到创建
df3
的理由,因为
df1
中的所有值都可能是潜在的如果需要,我会保留。
df1[df2,(V2=V2/i.V2,V3=V3/i.V2),by=.EACHI]
df1[df2,(V1,V2=V2/i.V2,V3=V3/i.V2)]
不需要在
by=.EACHI
中,也首选通过引用赋值,我会选择
df1[df2,`=`(V2=V2/i.V2,V3=i.V2)]
@davidernburg是的,但这修改了
df1
,这可能不是我们想要的。@Frank我读到OP想要通过一个键将
df1
中的任何值与
df2
中相应的值进行匹配。这听起来就像左连接,所以我看不到创建
df3
的理由,因为
df1
中的所有值都可能是潜在的在扩展性方面,总是有一些东西像
merge(df1,df2,“V1”)[,lapply(.SD[,!“V2.y”,with=FALSE],`/`,V2.y),by=V1]
@Frank我用另一种方式写了这篇文章,它允许更多的专栏,我看到…有太多的东西需要我仔细研究,以判断哪种方式更为一般。我怀疑你关于制作临时专栏的代码评论可以用
.SD[,!“V2.y”,with=FALSE]这样的方式来表达
但我可能错了。而且,
.SD/x
据我所知强制使用matrix。@Frank前6行只是更改了名称,这样如果有共同的名称,它们就不再是了,所以你几乎可以忽略它们。@Frank我听取了你关于如何删除temp列的建议。我还删除了对
yV1
A的引用就可扩展性而言,总有一些东西像
merge(df1,df2,“V1”)[,lapply(.SD[,!“V2.y”,with=FALSE],`/`,V2.y),by=V1]
@Frank我用另一种方式写了这篇文章,它允许更多的专栏,我看到…有太多的东西需要我仔细研究,以判断哪种方式更为一般。我怀疑你关于制作临时专栏的代码评论可以用
.SD[,!“V2.y”,with=FALSE]这样的方式来表达
但我可能是错的。而且,
.SD/x
据我所知强制使用matrix。@Frank前6行只是更改了名称,这样如果有共同的名称,它们就不再是了,所以你几乎可以忽略它们。@Frank我听取了你关于如何删除temp列的建议。我还删除了对
yV1