2014-08-30 185 views
0

不知道爲什麼這不起作用。我想從其餘的數據中減去第一列數據以形成一個新的數據框。在我看來,這樣做的最好方法是使用for循環。這裏是我的DF:for循環列r

 all a b c d e f g h i j k l m n o p q 
[1,] 15 14 17 6 NA 2 22 31 10 24 27 13 1 16 19 27 1 6 
[2,] 16 5 11 26 29 17 7 12 13 NA 26 21 25 15 4 9 5 21 
[3,] 12 11 9 25 21 8 26 16 11 9 30 NA 5 14 20 32 18 25 
[4,] 28 7 20 14 18 13 3 29 23 NA 19 20 23 25 2 4 31 3 
[5,] 21 26 13 9 12 7 11 4 1 5 10 16 NA 29 5 26 25 16 
[6,] 7 28 6 23 4 21 16 20 3 NA 4 29 26 13 24 5 13 29 

這裏是我做過什麼在R和我得到的錯誤是:在矩陣標數量不正確

new_df = c() 
for(i in 1:ncol(df)){ 
    new_df[,i] = df[,1] - df[,i] 
} 

我只是希望腳本通過減去第一列第二然後第三等

預期輸出只是表示前兩列和行

 a b 
[1,] 1 -2 
[2,] 11 5 

任何幫助,將不勝感激

回答

4

與您的數據,

txt <- "all a b c d e f g h i j k l m n o p q 
15 14 17 6 NA 2 22 31 10 24 27 13 1 16 19 27 1 6 
16 5 11 26 29 17 7 12 13 NA 26 21 25 15 4 9 5 21 
12 11 9 25 21 8 26 16 11 9 30 NA 5 14 20 32 18 25 
28 7 20 14 18 13 3 29 23 NA 19 20 23 25 2 4 31 3 
21 26 13 9 12 7 11 4 1 5 10 16 NA 29 5 26 25 16 
7 28 6 23 4 21 16 20 3 NA 4 29 26 13 24 5 13 29" 

df <- read.table(text = txt, header = TRUE) 

相信與否,你可以通過這樣做:

df[,1] - df[,-1] 

> df[,1] - df[,-1] 
    a b c d e f g h i j k l m n o p q 
1 1 -2 9 NA 13 -7 -16 5 -9 -12 2 14 -1 -4 -12 14 9 
2 11 5 -10 -13 -1 9 4 3 NA -10 -5 -9 1 12 7 11 -5 
3 1 3 -13 -9 4 -14 -4 1 3 -18 NA 7 -2 -8 -20 -6 -13 
4 21 8 14 10 15 25 -1 5 NA 9 8 5 3 26 24 -3 25 
5 -5 8 12 9 14 10 17 20 16 11 5 NA -8 16 -5 -4 5 
6 -21 1 -16 3 -14 -9 -13 4 NA 3 -22 -19 -6 -17 2 -6 -22 

如果你想要一個新的數據幀分配此

newdf <- df[,1] - df[,-1] 
0

您自己的代碼與data.frames一起使用:

df = structure(list(all = c(15L, 16L, 12L, 28L, 21L, 7L), a = c(14L, 
5L, 11L, 7L, 26L, 28L), b = c(17L, 11L, 9L, 20L, 13L, 6L), c = c(6L, 
26L, 25L, 14L, 9L, 23L), d = c(NA, 29L, 21L, 18L, 12L, 4L), e = c(2L, 
17L, 8L, 13L, 7L, 21L), f = c(22L, 7L, 26L, 3L, 11L, 16L), g = c(31L, 
12L, 16L, 29L, 4L, 20L), h = c(10L, 13L, 11L, 23L, 1L, 3L), i = c(24L, 
NA, 9L, NA, 5L, NA), j = c(27L, 26L, 30L, 19L, 10L, 4L), k = c(13L, 
21L, NA, 20L, 16L, 29L), l = c(1L, 25L, 5L, 23L, NA, 26L), m = c(16L, 
15L, 14L, 25L, 29L, 13L), n = c(19L, 4L, 20L, 2L, 5L, 24L), o = c(27L, 
9L, 32L, 4L, 26L, 5L), p = c(1L, 5L, 18L, 31L, 25L, 13L), q = c(6L, 
21L, 25L, 3L, 16L, 29L)), .Names = c("all", "a", "b", "c", "d", 
"e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q" 
), class = "data.frame", row.names = c(NA, -6L)) 


new_df = df 
for(i in 1:ncol(df)){ 
    new_df[,i] = df[,1] - df[,i] 
} 

new_df 

    all a b c d e f g h i j k l m n o p q 
1 0 1 -2 9 NA 13 -7 -16 5 -9 -12 2 14 -1 -4 -12 14 9 
2 0 11 5 -10 -13 -1 9 4 3 NA -10 -5 -9 1 12 7 11 -5 
3 0 1 3 -13 -9 4 -14 -4 1 3 -18 NA 7 -2 -8 -20 -6 -13 
4 0 21 8 14 10 15 25 -1 5 NA 9 8 5 3 26 24 -3 25 
5 0 -5 8 12 9 14 10 17 20 16 11 5 NA -8 16 -5 -4 5 
6 0 -21 1 -16 3 -14 -9 -13 4 NA 3 -22 -19 -6 -17 2 -6 -22 
+0

它也不適用於矩陣嗎? – A5C1D2H2I1M1N2O1R2T1 2014-08-30 06:03:51