在factor(请看一看)R中乘以单独数据帧的列 v1
如果我正确理解您的目标,这里有两种可能的解决方案。您可以使用在factor(请看一看)R中乘以单独数据帧的列 v1,r,R,如果我正确理解您的目标,这里有两种可能的解决方案。您可以使用匹配: v1 <- c("red", "a","b","c",1, 3, 5, 7) v2 <- c("red", "a","b","c",1, 3, 5, 7) v3 <- c("blue", "a","b","d",2, 4, 6, 8) v4 <- c("blue", "a","b","d",2, 4, 6, 8) v5 <- c("blue", "a","b","d",2, 4, 6, 8) df
匹配:
v1 <- c("red", "a","b","c",1, 3, 5, 7)
v2 <- c("red", "a","b","c",1, 3, 5, 7)
v3 <- c("blue", "a","b","d",2, 4, 6, 8)
v4 <- c("blue", "a","b","d",2, 4, 6, 8)
v5 <- c("blue", "a","b","d",2, 4, 6, 8)
df1 <- data.frame(rbind(v1,v2,v3,v4,v5))
v6 <- c("red", 2,2,4,2)
v7 <- c("blue",1,1,0,1)
df2 <- data.frame(rbind(v6,v7))
colnames(df2) <- c("Y1", "Y2", "Y3", "Y4", "Y5")
> df1
X1 X2 X3 X4 X5 X6 X7 X8
v1 red a b c 1 3 5 7
v2 red a b c 1 3 5 7
v3 blue a b d 2 4 6 8
v4 blue a b d 2 4 6 8
v5 blue a b d 2 4 6 8
> df2
Y1 Y2 Y3 Y4 Y5
v6 red 2 2 4 2
v7 blue 1 1 0 1
两个数据帧之间的列名相同,但每个数据帧中的变量不同,这会使问题变得非常复杂。列名与此无关。。使用df1[,#]或更改它们(如果您不想更改),因为您需要合并两个数据帧以高效地执行所需操作。@塞尼奥罗,为什么不在合并中使用后缀
?另请注意,这不是构建data.frame的方式。v1
(和其他行)中的所有项目都转换为字符。您将得到一个data.frame,其中每列都是一个因子。。。
> df3<-df1
> df3[,5:8]<-df3[,5:8]*df2[match(df1[,1],df2[,1]),2:5]
> df3
X1 X2 X3 X4 X5 X6 X7 X8
v1 red a b c 2 6 20 14
v2 red a b c 2 6 20 14
v3 blue a b d 2 4 0 8
v4 blue a b d 2 4 0 8
v5 blue a b d 2 4 0 8
> df3<-merge(df1,df2,by=1)
> df3[,5:8]<-df3[,5:8]*df3[,9:12]
> df3[,1:8]
X1 X2 X3 X4 X5 X6 X7 X8
1 blue a b d 2 4 0 8
2 blue a b d 2 4 0 8
3 blue a b d 2 4 0 8
4 red a b c 2 6 20 14
5 red a b c 2 6 20 14