我正在尝试构建用于分析长期数据的代码,这些数据将不断添加到当前数据中的ID中,并且可能会添加其他ID。因此,我希望确保每次向其添加更多数据时都不必大幅更改代码。我已经使用dplyr来扩展和按列减去,但这并不可行,因为数据变得更长,因为每次都必须修改代码。
以下是数据的子集:
public class DataActivity extends FragmentActivity implements **com.google.android.gms.location.LocationListener**, ConnectionCallbacks , OnConnectionFailedListener, OnMapReadyCallback{
我试图通过pinid顺序减去这些值,这样我就可以得到t1-t0,t2-t1等...如果我可以使用顺序日期而不是时间步长,那么时间步长更好在数据输入过程中输入的另一件事,或者如果它与时间步长一起作为数字,我可能也可以使它工作。
目前,我使用此question的一些代码取得了一些成功:
data<-structure(list(pinid = structure(c(1L, 2L, 1L, 2L, 1L, 2L), .Label
= c("CP_South_1_1", "CP_South_1_2"), class = "factor"), reading_date =
structure(c(16308, 16308, 16531, 16531, 16728, 16728), class = "Date"),
timestep = c("t0", "t0", "t1", "t1", "t2", "t2"), measurement = c(189,
186, 187, 185, 184, 181)), .Names = c("pinid", "reading_date",
"timestep", "measurement"), row.names = c(NA, -6L), class =
"data.frame")
然而,结果给了我绝对值,并在一个块中吐出来重复自己看起来像这样:
pin_dif <- function(x) setNames(
data.frame(pinid = x$pinid, as.list(- combn(x$measurement, 2, diff))),
c("pinid", combn(x$timestep, 2, paste, collapse = "_"))
)
by(data, data$pinid, pin_dif)
理想情况下,它会在数据框中吐出结果,如下所示:
data$pinid: CP_South_1_1
pinid t0_t1 t0_t2 t1_t2
1 CP_South_1_1 2 5 3
2 CP_South_1_1 2 5 3
3 CP_South_1_1 2 5 3
------------------------------------------------------------------------
data$pinid: CP_South_1_2
pinid t0_t1 t0_t2 t1_t2
1 CP_South_1_2 1 5 4
2 CP_South_1_2 1 5 4
3 CP_South_1_2 1 5 4
为了减少处理时间,我也不希望减去每个值的组合。在这个较小的数据集中只有一个额外的(t0-t2),但是由于你有更多的时间步,所以我不需要更多的值。
感谢您的帮助。
答案 0 :(得分:1)
我建议你使用data.table。这将使操作更容易。
您可以根据自己的喜好调整以下脚本(减少组合等)并将其包装在函数中。
data <- data %>% as.data.table()
data <- data %>% dcast.data.table(formula = pinid~timestep, value.var = "measurement")
data2 <- data %>% copy()
combs <- expand.grid(names(data[,2:ncol(data)]),names(data[,2:ncol(data)])) %>% as.data.table()
combs <- combs[Var2 %>% as.character()>Var1 %>% as.character()][,var3:=paste(Var1, Var2, sep = "_")]
for (i in combs$var3){ # i <- combs$var3[1];i
data2[, (i) := get(word(string = i,start = 2,sep = "_")) - get(word(string = i,start = 1,sep = "_"))]
}
names_vars <- names(data[, 2:ncol(data)])
data2 <- data2[, !names_vars, with = F]
data2
pinid t0_t1 t0_t2 t1_t2
1: CP_South_1_1 -2 -5 -3
2: CP_South_1_2 -1 -5 -4
答案 1 :(得分:0)
尝试使用此方法
select distinct ps_product_shop.id_product, name, ps_product.id_category_default from ps_product_shop
INNER JOIN ps_product ON ps_product_shop.id_product = ps_product.id_product
INNER JOIN ps_product_lang ON ps_product_shop.id_product = ps_product_lang.id_product
UPDATE ps_product, ps_product_shop
SET id_category_default = '114'
WHERE name LIKE "%acana%" AND
ps_product.id_category_default LIKE "%111%";
输出
library(tidyverse)
data %>%
group_by(pinid) %>%
arrange(pinid, timestep) %>%
nest(timestep, measurement) %>%
mutate(data = map(data, ~data.frame(key = paste(combn(.x$timestep, 2)[1,], combn(.x$timestep, 2)[2,], sep="_"),
value = combn(.x$measurement, 2)[2,] - combn(.x$measurement, 2)[1,]))) %>%
unnest() %>%
spread(key, value)