我試圖在兩個步驟中將兩個簡單函數應用於矩陣中的1:n列上的所有行或者df我希望將最後一列中的值用作函數中的輸入。 這個問題可能是重複的,但我根本找不到我要找的解決方案。我嘗試過寫一個函數,apply和dplyr函數,但是在每一處如何引用特定的列,併爲每個x,y的組合獲得單獨的結果都卡住了。應用使用數據框中的列作爲1:n列和行上的每個值的輸入的函數
我已經在這裏看到的答案[how to apply a function to every row of a matrix (or a data frame) in R這裏:
但這些操作大多是行或列明智的,我需要的函數,在每個觀測工作,即
這是一個簡化我的數據的例子 - 但我的數據框在變量和長度上的長度都不相同,因爲我正在測量深度可變的深度剖面。
1日所需的功能:
df<- matrix(c(
1.11543500, 1.09273900, 1.09362300, 1.09073300, 1.09668300, 0.0876387143,
1.08729500, 1.06946100, 1.06227900, 1.06633600, 1.06690000, 0.0853604143,
1.05458300, 1.03921000, 1.03225300, 1.03782000, 1.03416200, 0.0790749429,
1., 1.01204520, 1.00525750, 1.00781250, 1.00666170, 0.0756004571
), nrow = 4, byrow = TRUE)
首先我必須寬幅使用df應用功能等;
對於V1的每一行:由V6 V5減,這將使像這樣的輸出(將罰款離開V6出來:
df1
V1 V2 V3 V4 V5 V6
1 1.027796286 1.005100286 1.005984286 1.003094286 1.009044286 0.087638714
2 1.001934586 0.984100586 0.976918586 0.980975586 0.981539586 0.085360414
3 0.975508057 0.960135057 0.953178057 0.958745057 0.955087057 0.079074943
4 0.952231643 0.936444743 0.929657043 0.932212043 0.931061243 0.075600457
我曾嘗試:
df1<- apply(df, 1, function(x) x[1:5]-x[6])
它給了我這個,這是錯誤的:
df1 [,1] [,2] [,3] [,4]
[1,] 1.027796 1.0019346 0.9755081 0.9522316
[2,] 1.005100 0.9841006 0.9601351 0.9364447
[3,] 1.005984 0.9769186 0.9531781 0.9296570
[4,] 1.003094 0.9809756 0.9587451 0.9322120
[5,] 1.009044 0.9815396 0.9550871 0.9310612
任何人有關於如何糾正代碼的建議?我也ope n用於例如dplyr中的建議或要調用的函數。
我希望它也會給我一個答案,關於如何繼續下一步,我將不得不從第一次計算轉置結果並添加一些其他具有臨時和鹽度值以及常量的列通過如下公式來計算:
x = z- [constant_t * (t1 - t2) + constant_s * S]
其中z將是第一次計算的輸出。
謝謝@markdly!它工作正常!我一直忘記「。」快樂!但只有這樣纔不會像你的整個代碼那樣有幫助。但是,當我問@PoGibas時 - 腳本中是否會有一種方法來引用col名稱?下一步涉及5列,這將更容易,更安全!通過名稱來調用它們,因爲我的df有178個變量。 –
和tibble對我來說是新的!太好了!/謝謝 –
@ E.ThereseHarvey,很高興幫助!要在上面的例子中使用列名,你可以使用mutate_at(df,vars(V1:V5),funs(。-V6))''。您可能還想看看'?dplyr :: select_helpers'的其他方法,您可以根據它們的名稱來選擇變量,而不是'vars()'內部的'V1:V5'。 – markdly