Один из способов - заполнить NA
предыдущими NA
, используя na.locf
из zoo
, и выполнить сравнение
library(zoo)
zed$possessionName <- na.locf(zed$possessionName)
zed$output_col <- c(1, +(zed$possessionName[-1] != zed$possessionName[-nrow(zed)]))
zed
# possessionName possessionMarket output_col
#1 Eagles Boston College 1
#2 Blue Devils Duke 1
#3 Blue Devils <NA> 0
#4 Blue Devils Duke 0
#5 Eagles Boston College 1
#6 Blue Devils Duke 1
#7 Blue Devils Duke 0
#8 Eagles Boston College 1
#9 Eagles Boston College 0
#10 Eagles Boston College 0
#11 Eagles <NA> 0
#12 Blue Devils Duke 1
#13 Blue Devils Duke 0
#14 Blue Devils <NA> 0
#15 Eagles Boston College 1
. ] мы можем использовать fill
и lag
library(tidyverse)
zed %>%
fill(possessionName) %>%
mutate(output_col = c(1, +(possessionName != lag(possessionName))[-1]))
Хорошо, я отладил Ваш код.
Метки BOM появляются в исходном потоке, когда файлы читаются из диска:
byte[] bytes = File.ReadAllBytes(physicalPath);
// TODO: Convert unicode files to specified encoding. For now, assuming
// files are either ASCII or UTF8
При чтении файлов правильно можно избавиться от меток.
Это - Порядок байтов Mark (BOM) UTF.
Это будет в начале каждого файла, но Ваш редактор проигнорирует их там. При конкатенации они заканчивают в середине, таким образом, Вы видите их.
Проверьте, как Ваши js файлы кодируются и обеспечивают то же кодирование в коде, который делает чтение и конкатенацию. Эти два символа обычно указывают на unicode.
Я думаю, что это - Порядок байтов Mark (BOM) для файлов с кодировкой UTF-8. Эта метка позволяет определять, в каком хранится кодирование файла.
Теми символами является BOM UTF-8. Не кажется, что они прибывают из gzipped потока. Более вероятно, что они вставляются в ответный поток, таким образом, я предложил бы очистить ответ прежде, чем работать с ним:
context.Response.Clear();
Вы не опубликовали фактическое решение. Вот моя душа. В строке, где он считывает файл в память, я нашел какой-то странный способ удалить спецификацию:
byte[] bytes = File.ReadAllBytes(physicalPath);
String ss = new StreamReader(new MemoryStream(bytes), true).ReadToEnd();
byte[] b = StrToByteArray(ss);
return b;
И вам также понадобится эта функция:
public static byte[] StrToByteArray(string str)
{
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
return encoding.GetBytes(str);
}
Nitech
Если у вас есть содержимое файла в виде строки, .Trim () очень удобно отсекает "BOM".
Возможно, вы не сможете этого сделать, или вы можете захотеть пробел в конце файла, но это определенно вариант.
Для .js пробелы не важны, так что это может сработать.