2015-02-23 4 views
-4

Пожалуйста, помогите мне написать код в сочетании нескольких файлов csv в R, используя общее поле во всех файлах (но каждый файл имеет разницу в типах строк, таких как 702, 666 и т. Д.) И для отсутствующих значений мне нужен NA вместо отсутствующих значений.Слияние различных файлов csv большого размера

Для вашего удобства, здесь я показываю, как выглядит отдельный файл, так как здесь я не могу подключить несколько файлов. Я просто вставляю один. имя является общим для всех файлов. Имя файла как его заголовок вместе с его именем столбца.

name projected_leaf_area treatment species  g_alias  replicates 
1 A-2:1 215.209    WW  Chickpea ICCRIL03-0013 2 
2 A-2:2 148.404    WW  Chickpea ICCRIL03-0119 2 
3 A-2:3 206.566    WW  Chickpea ICCRIL03-0007 2 
. .. . . . ... ........ ...... 
. .. . . . ... ........ ...... 
702 B-2:234 242.06    WW  Chickpea ICCRIL03-0143 4 

пожалуйста, помогите мне, чтобы объединить файлы друзей ... спасибо за ваше время ...

+0

Пожалуйста, правильно отредактируйте ваш вопрос. Текст в верхнем регистре имеет определенное значение в Интернете, это означает, что вы кричите! Поэтому, пожалуйста, не используйте его только для выделения некоторых предложений, вместо этого используйте полужирный или курсивный текст. – digEmAll

+0

Извините, что в следующий раз я не буду использовать его .. Я думал просто выделить его, но из будущего я буду использовать полужирный или курсив ... спасибо u и извините ... – eswari

+0

Пожалуйста, сделайте вашу проблему воспроизводимой. Общение в комментариях - это не путь. –

ответ

0

Загрузить все файлы с помощью read.csv и merge их вместе с помощью Reduce:

files <- dir(pattern = ".csv") 
d <- lapply(files, read.csv, stringsAsFactors = FALSE) 
for(i in seq_along(d)) { 
    names(d[[i]]) <- paste0(files[i], ".", names(d[[i]])) 
} 
Reduce(function(x,y) merge(x,y,by="name", all=TRUE, sort = FALSE), d) 
+0

Большое вам спасибо за ваше время Томас ... но он объединяет все файлы csv вниз (вертикально). Я хочу объединиться по горизонтали с общим полем. пожалуйста????? – eswari

+0

Вам нужно будет уточнить. Вероятно, вы захотите использовать 'merge' (или, возможно,' cbind') вместо 'rbind', но это зависит от того, как вы хотите комбинировать строки. – Thomas

+0

Томас для разных рядов строк cbind нельзя использовать правильно ??? если я пытаюсь использовать слияние, файлы <- dir (pattern = ".csv") d <- lapply (файлы, read.csv, strAsAsFactors = FALSE) Q <-do.call ("merge (files) by = «name», all = TRUE, sort = F) », d) ...... отображается ошибка как« Ошибка: неожиданный символ в «Q <-do.call (« merge (files) by = «name» «.... см. выше в исходном вопросе, который я ввел вам, как точно все мои взгляды, поэтому на основе поля имени я хочу, чтобы все мои файлы csv в сочетании с именами fila в качестве заголовка ... например, мои имена файлов были бы s5, s6, s7, s8 ... – eswari

0
file.data <- lapply(file.names, function(fn){read.csv(fn)})  
common.cols <- Reduce('intersect', lapply(file.data, colnames)) 
do.call('rbind', lapply(file.data, function(fd) fd[, common.cols])) 

Игнорировать выложенные выше Попробуйте

mergeall <- function(x, y){merge(x, y, all = TRUE)} 
file.data <- lapply(file.names, function(fn){read.csv(fn)}) 
# example data: 
# file.data[[1]] <- data.frame(id = letters[1:4], val1 = 1:4) 
# file.data[[2]] <- data.frame(id = letters[1:3], val2 = c(1, NA, 2)) 
# file.data[[3]] <- data.frame(id = letters[2:5], val3 = factor(letters[1:4])) 
Reduce('mergeall', file.data) 
# id val1 val2 val3 
# 1 a 1 1 <NA> 
# 2 b 2 NA a 
# 3 c 3 2 b 
# 4 d 4 NA c 
# 5 e NA NA d 
+0

Большое вам спасибо за ваше время Russ ... но он показывает ошибку file.names не найден ??? пожалуйста, не могли бы вы объяснить почему ??? – eswari

+0

вам нужно будет определить file.names <- c (...) как строку имен файлов, которые вы хотите импортировать. – nathaneastwood

+0

Natty не мог бы вы рассказать ... извините, я не мог понять вашу точку зрения. Я новичок в этой среде программирования r .. Мои имена файлов будут похожи на s6, s7, s8, s9, ..... s50 – eswari

Смежные вопросы