鉴于以下数据:
library(data.table)
demo <- data.table(ID = c("A", "A", "A", "A","A", "B", "B","B", "C","C","C", "D",
"D"),
Year = c(2011, 2012, 2013, 2014, 2015,
2012, 2013, 2015,
2013, 2014, 2015,
2013, 2015))
我们可以清楚地看到,对于A的ID,它似乎不会随时间而改变,因此不应该注册任何更改。 但对于B的ID,我们看到2011年至2012年,2013年至2014年以及2014年至2015年的变化,我们希望显示这些变化。
这些数据的清晰图片如下所示。
现在,要在R中构建它,我实际上可以执行以下操作:
demo[, Value := 1]
dcast(demo, ID ~ Year, value.var = "Value", fill = 0)
然后尝试手动计算每年之间的变化。结果表就像下面的红色表一样。
然而,如果有多年,程序化解决方案将更有效和更清洁。我想知道这样的事情是否可行(没有for循环)。
答案 0 :(得分:2)
您应该始终使用data.table。
以长格式工作implementation 'com.quickblox:quickblox-android-sdk-core:2.5.2@aar'
implementation('com.quickblox:quickblox-android-sdk-chat:2.5.2@aar') {
transitive = true
}
答案 1 :(得分:0)
我们在那里可以获得理想的价值。一个选项可能是更改回data.frame
并以subtraction
格式执行矩阵操作(demo
)。
library(data.table)
demo[, Value := 1]
DT <- dcast(demo, ID ~ Year, value.var = "Value", fill = 0)
# change back to data.frame to use matrix operation
setDF(DT)
#matrix operation with a column shift
cbind(DT[1], DT[,3:6] - DT[,2:5])
# ID 2012 2013 2014 2015
# 1 A 0 0 0 0
# 2 B 1 0 -1 1
# 3 C 0 1 0 0
# 4 D 0 1 -1 1
数据:强>
library(data.table)
demo <- data.table(ID = c("A", "A", "A", "A","A", "B", "B","B", "C","C","C", "D",
"D"),
Year = c(2011, 2012, 2013, 2014, 2015,
2012, 2013, 2015,
2013, 2014, 2015,
2013, 2015))