将许多列除以另一列

Cap*_*ler 2 r

好的

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

我不明白这个错误:

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
Run Code Online (Sandbox Code Playgroud)

看到两者的行数相同:

dim(a)
dim(b)
Run Code Online (Sandbox Code Playgroud)

Ben*_*ker 6

drop=FALSE当矩阵索引的使用导致大小为1的维度(即,一行或一列)时,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
Run Code Online (Sandbox Code Playgroud)

因此,除以df1[,"C"]除以数字(整数)向量而不是数据帧.该错误‘/’ only defined for equally-sized data frames意味着两个数据帧应该具有完全相同的大小(相同的行数列数).

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