У меня есть следующий файл .csv
, который я загрузил в Интернете:
financials.morningstar.com/ajax/exportKR2CSV.html?&t=AAPL
Я пытаюсь отредактировать электронную таблицу, чтобы имена столбцов были датами, а имена строк - различными соотношениями и индексами, указанными в ней. Ниже мой код, но ни столбцы, ни имена строк не работают. Какие-либо предложения?
read.csv('/path_to_csv.csv',header=F)[-c(1:2),-c(12)]->spreadsheet
spreadsheet_body<-spreadsheet[-1,-1]
colnames(spreadsheet_body)<-spreadsheet[1,-1]
rownames(spreadsheet_body)<-c()
rownames(spreadsheet_body)<-spreadsheet[-1,1]
3 ответа
Рассмотрите возможность простого транспонирования фрейма данных с помощью t (), а затем заменив заголовки из первой строки. Ниже используется файл csv AAPL из URL:
df <- read.csv('http://financials.morningstar.com/ajax/exportKR2CSV.html?&t=AAPL',
skip=2, stringsAsFactors = FALSE)
df <- df[df[2]!='2006-09',] # REMOVE REPEAT HEADERS
df <- df[-grep('Key Ratios', df$X),] # REMOVE KEY RATIO HEADERS
finaldf <- data.frame(t(df), stringsAsFactors = FALSE)
colnames(finaldf) <- finaldf[1,]
finaldf <- finaldf[-1,]
# PERIOD COLUMN
finaldf$Period <- as.character(rownames(finaldf))
finaldf$Period <- gsub("X", "Y", gsub("\\.", "M", finaldf$Period))
rownames(finaldf) <- 1:nrow(finaldf) # RESET ROWNAMES
finaldf <- finaldf[,c(ncol(finaldf), 2:ncol(finaldf)-1)] # RE-ORDER PERIOD TO START
# CONVERT TO NUMERIC
for (i in names(finaldf)) {
if (i != "Period") {
finaldf[[i]] <- as.numeric(gsub(",", "", finaldf[[i]]))
}
}
finaldf[, c(1:7)]
Вывод
# Period Revenue USD Mil Gross Margin % Operating Income USD Mil
# 1 Y2006M09 19315 29.0 2453
# 2 Y2007M09 24006 34.0 4409
# 3 Y2008M09 32479 34.3 6275
# 4 Y2009M09 42905 40.1 11740
# 5 Y2010M09 65225 39.4 18385
# 6 Y2011M09 108249 40.5 33790
# 7 Y2012M09 156508 43.9 55241
# 8 Y2013M09 170910 37.6 48999
# 9 Y2014M09 182795 38.6 52503
# 10 Y2015M09 233715 40.1 71230
# 11 TTM 227535 39.8 66864
# Operating Margin % Net Income USD Mil Earnings Per Share USD
# 1 12.7 1989 0.32
# 2 18.4 3496 0.56
# 3 19.3 4834 0.77
# 4 27.4 8235 1.30
# 5 28.2 14013 2.16
# 6 31.2 25922 3.95
# 7 35.3 41733 6.31
# 8 28.7 37037 5.68
# 9 28.7 39510 6.45
# 10 30.5 53394 9.22
# 11 29.4 50678 8.97
Вы не передаете конкретное сообщение. Когда я запускаю ваш код, я получаю
duplicate 'row.names' are not allowed
In addition: Warning message:
non-unique values when setting 'row.names': ‘’, ‘10-Year Average’, ‘3-Year Average’, ‘
Я подозреваю, что это происходит потому, что во многих разделах встречается название «Среднее за 3 года» и т. Д.
Вот возможный подход (только для трех разделов), который утомителен, но может облегчить последующую обработку.
financials <- read.table('Downloads/AAPL Key Ratios.csv',sep=",",quote = '"', skip=3, nrow=15,
col.names=c('item', 'Y2006M09', 'Y2007M09', 'Y2008M09', 'Y2009M09', 'Y2010M09',
'Y2011M09', 'Y2012M09', 'Y2013M09', 'Y2014M09', 'Y2015M09', 'TTM'))
margins <- read.table('Downloads/AAPL Key Ratios.csv',sep=",",quote = '"', skip=21, nrow=9,
col.names=c('item', 'Y2006M09', 'Y2007M09', 'Y2008M09', 'Y2009M09', 'Y2010M09',
'Y2011M09', 'Y2012M09', 'Y2013M09', 'Y2014M09', 'Y2015M09', 'TTM'))
revenue_percent <- read.table('Downloads/AAPL Key Ratios.csv',sep=",",quote = '"', skip=44, nrow=4,
col.names=c('item', 'Y2006M09', 'Y2007M09', 'Y2008M09', 'Y2009M09', 'Y2010M09',
'Y2011M09', 'Y2012M09', 'Y2013M09', 'Y2014M09', 'Y2015M09', 'TTM'))
Это не решает всех вопросов, но вы можете попробовать rownames
по частям:
read.csv("http://financials.morningstar.com/ajax/exportKR2CSV.html?&t=AAPL",header=T,stringsAsFactors = F,skip = 2)[,-c(12)]->spreadsheet
#str(spreadsheet)
View(spreadsheet)
Похожие вопросы
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат полностью. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.