Вставка нескольких файлов csv в виде одного кадра данных в R [дубликат]

Чтобы скомпилировать примеры CUDA 8.0 на Ubuntu 16.10, я сделал:

sudo apt-get install gcc-5 g++-5
cd /path/to/NVIDIA_CUDA-8.0_Samples
# Find the path to the library (this should be in NVIDIA's Makefiles)
LIBLOC=`find /usr/lib -name "libnvcuvid.so.*" | head -n1 | perl -pe 's[/usr/lib/(nvidia-\d+)/.*][$1]'`
# Substitute that path into the makefiles for the hard-coded, incorrect one
find . -name "*.mk" | xargs perl -pi -e "s/nvidia-\d+/$LIBLOC/g"
# Make using the supported compiler
HOST_COMPILER=g++-5 make

Это имеет то преимущество, что не изменяйте всю систему или не создавайте символические ссылки только для двоичных файлов (что может вызвать проблемы с связыванием библиотек .)

27
задан mropa 5 February 2010 в 19:01
поделиться

2 ответа

Вы можете посмотреть на близкий вопрос о stackoverflow .

Я бы применил это в два этапа: импортировать все данные (с помощью plyr), затем объединить его:

filenames <- list.files(path=".../tempDataFolder/", full.names=TRUE)
library(plyr)
import.list <- llply(filenames, read.csv)

Это даст вам список всех файлов, которые вам теперь нужно объединить вместе. Есть много способов сделать это, но вот один из подходов (с Reduce):

data <- Reduce(function(x, y) merge(x, y, all=T, 
    by=c("COUNTRYNAME", "COUNTRYCODE", "Year")), import.list, accumulate=F)

В качестве альтернативы вы можете сделать это с пакетом reshape, если вам неудобно Reduce:

library(reshape)
data <- merge_recurse(import.list)
37
ответ дан Community 18 August 2018 в 07:18
поделиться
  • 1
    Возможно, стоит заметить, что вы можете объединить все это с дополнительным столбцом .id, содержащим имена файлов, вызывая ldply вместо llply. Затем вызов Reduce или merge отменяется. – CharlesB 9 December 2014 в 10:05

Если я не ошибаюсь, довольно простое изменение может устранить 3:length(FileNames) kludge:

FileNames <- list.files(path=".../tempDataFolder/", full.names=TRUE)
dataMerge <- data.frame()
for(f in FileNames){ 
  ReadInMerge <- read.csv(file=f, header=T, na.strings="NULL")
  dataMerge <- merge(dataMerge, ReadInMerge, 
               by=c("COUNTRYNAME", "COUNTRYCODE", "Year"), all=T)
}
1
ответ дан Ken Williams 18 August 2018 в 07:18
поделиться
  • 1
    @ken: поскольку dataMerge является пустой data.frame, функция merge() не может найти общий идентификатор в первом цикле for. если я присвою, например, первый файл dataMerge, он возвращает меня к моей первоначальной идее. – mropa 5 February 2010 в 20:53
  • 2
    Извините, я должен был сначала попробовать. Я думал о rbind (), в котором пустой кадр данных обрабатывается так, как если бы требуемые столбцы присутствовали, но были пустыми. – Ken Williams 8 February 2010 в 17:04
Другие вопросы по тегам:

Похожие вопросы: