Я новичок в R. У меня возникла проблема при объединении данных, надеюсь, что кто-нибудь поможет решить ее.Предположим, что у меня есть два CSV-файла, такие как A.csv и B.csv, расположенные по пути «C: \ Users \ Public \ A».Они выглядят так:
A.csv
T,2015,2016,2017,2018
X1,1,2,3,2
X2,1,2,2,3
X3,1,3,4,2
B.csv
T,2015,2016,2017
X1,2,4,3
X2,2,2,3
X3,3,3,4
И тогда япопытаться объединить их, а также транспонировать их с помощью следующих функций.Они созданы Рикардо Оливерос-Рамосом в здесь и Тони Куксоном в здесь .1. Во-первых, я создаю функцию read.tcsv
для чтения и транспонирования данных в файл CSV
read.tcsv = function(file, header=TRUE, sep=",", ...) {
n = max(count.fields(file, sep=sep), na.rm=TRUE)
x = readLines(file)
.splitvar = function(x, sep, n) {
var = unlist(strsplit(x, split=sep))
length(var) = n
return(var)
}
x = do.call(cbind, lapply(x, .splitvar, sep=sep, n=n))
x = apply(x, 1, paste, collapse=sep)
out = read.csv(text=x, sep=sep, header=header, ...)
return(out)
}
2.Затем я использую multrbind.fill
, чтобы объединить и заполнить пропущенное значение
multrbind.fill = function(mypath){
filenames=list.files(path=mypath, full.names=TRUE)
datalist = lapply(filenames, function(x){
read.tcsv(file=x,header=T)
}
)
Reduce(function(x,y) {plyr::rbind.fill(x,y)}, datalist)
}
Результат выглядит хорошо:
ï..T X1 X2 X3
2015 1 1 1
2016 2 2 3
2017 3 2 4
2018 2 3 2
2015 2 2 3
2016 4 2 3
2017 3 3 4
Однако я хочу добавить столбец в качестве идентификатора для каждого файла со своим именем файла (или уникальными идентификаторами), например:
ï..T ID X1 X2 X3
2015 A 1 1 1
2016 A 2 2 3
2017 A 3 2 4
2018 A 2 3 2
2015 B 2 2 3
2016 B 4 2 3
2017 B 3 3 4
Кто-то мне поможет!?Заранее спасибо.