,我有以下數據表:計算差異,在數據表中增加新列,每兩列
library(data.table)
> dt1
id i i-2015 a a-2015 w w-2015 f f-2015
1: A 2 1 1 1 2 2 2 1
2: B 4 2 2 1 3 1 3 3
3: C 6 6 3 1 4 2 5 1
dt1 <- structure(list(id = c("A", "B", "C"), i = c(2, 4, 6), `i-2015` = c(1,
2, 6), a = c(1, 2, 3), `a-2015` = c(1, 1, 1), w = c(2, 3, 4),
`w-2015` = c(2, 1, 2), f = c(2, 3, 5), `f-2015` = c(1, 3,
1)), .Names = c("id", "i", "i-2015", "a", "a-2015", "w",
"w-2015", "f", "f-2015"), class = c("data.table", "data.frame"
))
我想什麼來實現在每兩列,以添加一個新的計算之間的區別兩列前是這樣的:
> result
id i i-2015 i difference a a-2015 a difference w w-2015 w difference f f-2015 f difference
1: A 2 1 1 1 1 0 2 2 0 2 1 1
2: B 4 2 2 2 1 1 3 1 2 3 3 0
3: C 6 6 0 3 1 2 4 2 2 5 1 4
我試圖做的是下面的,先找到列,我將需要添加的差異,然後使用add_column指定:
library(tibble)
diff_columns <- unique(str_replace(names(dt1), "-2015", ""))[-1]
for (i in 1:length(diff_columns)) {
assign(paste(diff_columns[i], "difference"), dt1[, get(diff_columns[i]) - get(paste0(diff_columns[i], "-2015"))])
dt1 <- add_column(dt1, get(paste(diff_columns[i], "difference")), .after = paste0(diff_columns[i], "-2015"))
}
但這種失敗在許多不同的方式...
首先所有dt1[, get(diff_columns[i]) - get(paste0(diff_columns[i], "-2015"))]
沒有得到我什麼,我想,我不知道爲什麼。 dt1[, get(diff_columns[i])]
部分按預期工作,但不是dt1[get(paste0(diff_columns[i], "-2015"))]
部分。
第二,add_column部分不評估粘貼(diff_columns [i],「差異」),並嘗試將其用作列名稱,因爲不能重複列名稱,所以不起作用。
如果清理您的數據,這是相當容易。像'melt(dt1,id =「id」,meas = patterns(「^ \\ w $」,「^ \\ w - \\ d {4} $」),value.name = c(「letter」 ,「yr」),variable.factor = FALSE)[。(v = as.character(1:4),r = c(「i」,「a」,「w」,「f」)) 。(變量= v),變量:= ir] []',之後你想在發佈時只回到不可行的寬格式。 – Frank
是的,你可能是對的。感謝您的意見。 – User2321