将许多列除以另一列

时间:2017-04-17 18:10:25

标签: r

好的

A <- c(1:10)
B <- c(2:11)
C <- c(3:12)
df1 <- data.frame(A,B,C)

我不明白这个错误:

df2 <- df1 / df1[,"C"]
df2 <- df1[1:3,] / df1[1:3,"C"]

a <- subset (df1, select = c(A, B)) 
b <- subset (df1, select = c (C))
c <- a/b
## Error in Ops.data.frame(a, b) : 
##  ‘/’ only defined for equally-sized data frames

看到两者的行数相同:

dim(a)
dim(b)

2 个答案:

答案 0 :(得分:6)

当矩阵索引的使用导致大小为1(即一行或一列)的维度时,R会自动删除维度(除非您明确指定drop=FALSE),但使用subset()数据帧总是产生一个数据帧(即使它只有一列):

> str(b)
'data.frame':   10 obs. of  1 variable:
 $ C: int  3 4 5 6 7 8 9 10 11 12
> str(df1[,"C"])
 int [1:10] 3 4 5 6 7 8 9 10 11 12

因此除以df1[,"C"]除以数字(整数)向量而不是数据帧。错误‘/’ only defined for equally-sized data frames表示两个数据框应完全大小相同(行数列相同)。

sweep(df1,df1[,"C"],MARGIN=1,"/")可能更安全。

答案 1 :(得分:1)

由于它们的大小不同,即列数不同,因此会产生错误。

以下将a分为b

c <- a/b$C