0
我有一個函數來計算時滯手段。按組應用多變量自定義函數
computeMSD <- function(x, y)
{
until = length(x)
msd.t <- rep(0,until)
for (dt in 1:until)
{
displacement.x <- as.vector(na.omit(x[(1+dt):length(x)]) - x[1:(length(x)-dt)])
displacement.y <- as.vector(na.omit(y[(1+dt):length(y)]) - y[1:(length(y)-dt)])
sqrdispl <- (displacement.x^2 + displacement.y^2)
msd.t[dt] <- mean(sqrdispl)
}
return(msd.t)
}
對於每x,y座標設置I可以得到滯後等於座標組的數目的長度的最大數量,但結果不計算行方向或產生單個值作爲更常見的情況下,例如mean()
。如何使用這個功能?將df作爲參數並以這種方式解決這個問題會比較容易嗎,或者之後的小組應用呢?
Dput'ed數據樣本:
coordinates <- structure(list(t = c(0L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L,
10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 0L, 1L,
2L, 3L, 4L, 5L, 6L, 7L, 8L), x = c(77.1122594462641, 76.9268087636518,
77.0824919447165, 77.2633028849826, 77.2986534556372, 76.9451627690267,
77.016568428648, 77.2031866048323, 77.152257554526, 77.0782765887312,
77.3698311386635, 77.190034642786, 77.4707481927975, 77.5514683890447,
77.4221538951355, 77.4870731430072, 77.5337382441554, 77.6083147834499,
78.0014060220692, 77.914303422688, 77.898082741035, 24.8338993587775,
25.2639774845389, 25.3742480546192, 25.4623060340105, 25.3898139500925,
25.1593906132865, 24.6920776131651, 25.1743141921877, 25.4778651641087
), y = c(4.74130698923006, 4.46551233016053, 3.93123573693172,
4.55995544813954, 4.67992700953899, 4.64997652545671, 4.55836080283123,
4.64450813733432, 4.68934313336444, 4.81733283824963, 4.58214680116643,
4.66256892407664, 4.25844572526743, 4.31419251260346, 4.22828043965437,
4.38041204106514, 4.47565650005594, 4.1772558339639, 4.349937065643,
4.32154195325593, 4.44461228490339, 18.7882053639457, 18.9248711275236,
19.1533421986122, 18.5732434777371, 18.627847083506, 18.9591158655086,
18.8256309202803, 18.8955701466044, 18.5083633311125), track_id = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
"14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24",
"25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35",
"36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46",
"47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57",
"58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68",
"69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79",
"80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90",
"91", "92", "93", "94", "95", "96", "97", "98", "99", "100",
"101", "102", "103", "104", "105", "106", "107", "108", "109",
"110", "111", "112", "113", "114", "115", "116", "117", "118",
"119", "120", "121", "122", "123", "124", "125", "126", "127",
"128", "129", "130", "131", "132", "133", "134", "135", "136",
"137", "138", "139", "140", "141", "142", "143", "144", "145",
"146", "147", "148", "149", "150", "151", "152", "153", "154",
"155", "156", "157", "158", "159", "160", "161", "162", "163",
"164", "165", "166", "167", "168", "169", "170", "171", "172",
"173", "174", "175", "176", "177", "178", "179", "180", "181",
"182", "183", "184", "185", "186", "187", "188", "189", "190",
"191", "192", "193", "194", "195", "196", "197", "198", "199",
"200", "201", "202", "203", "204", "205", "206", "207", "208",
"209", "210", "211", "212", "213", "214", "215", "216", "217",
"218", "219", "220", "221", "222", "223", "224", "225", "226",
"227", "228", "229", "230", "231", "232", "233", "234", "235",
"236", "237", "238", "239", "240", "241", "242", "243", "244",
"245", "246", "247", "248", "249", "250", "251", "252", "253",
"254", "255", "256", "257", "258", "259", "260", "261", "262",
"263", "264", "265", "266", "267", "268", "269", "270", "271",
"272", "273", "274", "275", "276", "277", "278", "279", "280",
"281", "282", "283", "284", "285", "286", "287", "288", "289",
"290", "291", "292", "293", "294", "295", "296", "297", "298",
"299", "300", "301", "302", "303", "304", "305", "306", "307",
"308", "309", "310", "311", "312", "313", "314", "315", "316",
"317", "318", "319", "320", "321", "322", "323", "324", "325",
"326", "327", "328", "329", "330", "331", "332", "333", "334",
"335", "336", "337", "338", "339", "340", "341", "342", "343",
"344", "345", "346", "347", "348", "349"), class = "factor")), .Names = c("t",
"x", "y", "track_id"), class = c("data.table", "data.frame"), row.names = c(NA,
-30L))
手動單track_id
library(dplyr)
single_track <- filter(df, track_id == "1")
single_track$msd <- computeMSD(single_track$x, single_track$y)
single_track$lag <- seq_along(single_track$msd)
工作給人
t x y track_id msd lag
1 0 77.11226 4.741307 1 0.0934063 1
2 1 76.92681 4.465512 1 0.1426363 2
3 2 77.08249 3.931236 1 0.1376502 3
4 3 77.26330 4.559955 1 0.1457362 4
5 4 77.29865 4.679927 1 0.1715850 5
6 5 76.94516 4.649977 1 0.2146411 6
哇,比我想象的要容易得多! –