Я пытался найти умный ответ на этот вопрос, но оказалось, что я не такой умный ;-)
Итак, вот одна попытка
Для каждого столбца сначала замените 1 на имя этот столбец и 0 с NA, используя lapply
df[] <- lapply(names(df), function(x) ifelse(df[[x]] == 1, x, NA))
df
# Brand1 Brand2
#1 Brand1 Brand2
#2 <NA> Brand2
#3 Brand1 Brand2
#4 Brand1 <NA>
#5 <NA> Brand2
Если важно изменить порядок данных, сдвигая NA
в конце строки, мы можем сделать это, используя apply
Можно считать целое содержание файла использование одного из методов, перечисленных здесь
Мой фаворит - этот:
public static long copyLarge(InputStream input, OutputStream output)
throws IOException {
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
long count = 0;
int n = 0;
while ((n = input.read(buffer))>=0) {
output.write(buffer, 0, n);
count += n;
}
return count;
}
Не используйте readLine (); передайте содержание один символ во время с помощью чтения () метод. При использовании его на BufferedReader это будет иметь ту же производительность, хотя в отличие от кода выше его не "нормализует" разрывы строки Windows-style CR/LF.