[英]R divide each column in dataframe by last row value
我有一個數據框,正在嘗試將數據框的每一列除以最后一行的值:
A <- c(1:10)
B <- c(2:11)
C <- c(3:12)
df1 <- data.frame(A,B,C)
df2 <- df1/df1[10,]
但是我得到一個錯誤。 我很高興知道我在做什么錯。
data.frames
並非用於data.frames
操作。
data.frame(lapply(df1, function(X) X/X[10]))
應該做到的。 或改用矩陣。
df1 = as.matrix(df1)
> t(t(df1)/df1[10,])
A B C
[1,] 0.1 0.1818182 0.2500000
[2,] 0.2 0.2727273 0.3333333
[3,] 0.3 0.3636364 0.4166667
[4,] 0.4 0.4545455 0.5000000
[5,] 0.5 0.5454545 0.5833333
[6,] 0.6 0.6363636 0.6666667
[7,] 0.7 0.7272727 0.7500000
[8,] 0.8 0.8181818 0.8333333
[9,] 0.9 0.9090909 0.9166667
[10,] 1.0 1.0000000 1.0000000
除以c(df[10,])
也可以,例如:
df1/c(df1[10,])
> df1[] <- lapply(df1, function(x) x/tail(x,1) )
> df1
A B C
1 0.1 0.1818182 0.2500000
2 0.2 0.2727273 0.3333333
3 0.3 0.3636364 0.4166667
4 0.4 0.4545455 0.5000000
5 0.5 0.5454545 0.5833333
6 0.6 0.6363636 0.6666667
7 0.7 0.7272727 0.7500000
8 0.8 0.8181818 0.8333333
9 0.9 0.9090909 0.9166667
10 1.0 1.0000000 1.0000000
這有點痛苦,但是在更大的數據情況下可能會更快:
data.matrix(df1) / rep( unlist(df1[10,]), each=nrow(df1) )
弗蘭克在某種程度上是正確的(並且我之前使用掃掠的失敗嘗試之一是接近的:
sweep(df1, 2, unlist(df1[10, ]), "/")
sapply(names(df1),function(x)df1[,x]/df1[nrow(df1),x])
A B C
[1,] 0.1 0.1818182 0.2500000
[2,] 0.2 0.2727273 0.3333333
[3,] 0.3 0.3636364 0.4166667
[4,] 0.4 0.4545455 0.5000000
[5,] 0.5 0.5454545 0.5833333
[6,] 0.6 0.6363636 0.6666667
[7,] 0.7 0.7272727 0.7500000
[8,] 0.8 0.8181818 0.8333333
[9,] 0.9 0.9090909 0.9166667
[10,] 1.0 1.0000000 1.0000000
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.