Я обрабатываю экземпляр data.table
и, глядя, чтобы создать дополнительный столбец, используя :=
, это работало нормально, пока я не сделал двойную индексацию.создание столбца data.table с `: =` и двойным индексированием
Для следующего экземпляра data.table
:
example_data= structure(list(V1 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,1L, 1L),
.Label = c("AUDUSD", "EURUSD", "GBPUSD", "NZDUSD", "USDCAD","USDJPY"), class = "factor"),
V2 = structure(c(1L, 1L, 1L, 1L,1L, 1L, 1L, 1L, 1L, 1L),
.Label = c("2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014"),
class = "factor"),
V3 = c("1.RData", "10.RData", "11.RData", "12.RData", "2.RData", "3.RData", "4.RData", "5.RData", "6.RData", "7.RData")),
.Names = c("V1", "V2", "V3"),
class = c("data.table", "data.frame"), row.names = c(NA, -10L))
, который дает эти данные:
example_data V1 V2 V3 1: AUDUSD 2007 1.RData 2: AUDUSD 2007 10.RData 3: AUDUSD 2007 11.RData 4: AUDUSD 2007 12.RData 5: AUDUSD 2007 2.RData 6: AUDUSD 2007 3.RData 7: AUDUSD 2007 4.RData 8: AUDUSD 2007 5.RData 9: AUDUSD 2007 6.RData 10: AUDUSD 2007 7.RData
Ищу разделить колонку "V3" на "" и получить предыдущее число как символ в новом столбце в той же таблице.
Делать это очень просто в нормальном R:
example_data$MONTH = apply(example_data,1, function(x) { strsplit(as.character(x[["V3"]]),"\\.")[[1]][1]})
Я думал, что делает это в data.table
будет еще более простым:
example_data[,MONTH:=strsplit(as.character(V3),"\\.")[[1]][1]]
Однако двойная индексация не является интерпретируется так, как я предполагал, потому что он меняет все значения на исход первой строки. Удаление индексирования делает выполнять правильную работу (только не извлекая и размещая данные в нужном месте):
example_data[,strsplit(as.character(V3),"\\.")]
Я также попытался усваивают индексации путем применения функции, но есть к тому же неправильно результат:
myfunc <- function(x) { strsplit(as.character(x),"\\.")[[1]][1] } example_data[,MONTH:=myfunc(V3)]
Я всегда могу использовать стандартное решение R, но если кто-нибудь знает решение, основанное data.table
, который будет оценен. Меня не интересуют другие стандартные R или альтернативы (они великолепны - просто не то, что я прошу).
Чтобы получить первый элемент каждого списка, вам понадобится тот же 'apply' (или лучше' sapply'). Но мы должны обеспечить функцию, чтобы сделать это удобно. Не могли бы вы указать проблему [здесь] (http://github.com/Rdatatable/data.table/issues)? – Arun
Я буду, 'data.table' намного быстрее, чем некоторые другие варианты, это стоит кривая обучения синтаксису. –