好的
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)
最佳答案
当使用矩阵索引导致维度大小为 1(即一行或一列)但使用 drop=FALSE
时,R 会自动删除维度(除非您明确指定 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,"/")
可能更安全。
关于r - 将许多列除以另一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43456965/