r - 如何根据 csv 文件中的前 6 个单元格创建列?
解决方案
假 CSV 数据,存储为"foo.csv"
:
REG,CO
UF,DF
ESTACAO,BRASILIA
Date,Hora,PRECIP,TEMP
01/01/2020,0000 UTC,0,20
01/01/2000,0100 UTC,0,19.5
01/01/2000,0200 UTC,0,21
阅读它,找到“真正的”标题行,然后继续:
alldat <- readLines("foo.csv")
alldat
# [1] "REG,CO" "UF,DF" "ESTACAO,BRASILIA" "Date,Hora,PRECIP,TEMP"
# [5] "01/01/2020,0000 UTC,0,20" "01/01/2000,0100 UTC,0,19.5" "01/01/2000,0200 UTC,0,21"
ind <- grep("Hora", alldat)
ind
# [1] 4
从这里,我们可以确定标头信息和其余数据:
header <- as.data.frame(t(read.csv(text = alldat[1:(ind-1)], header = FALSE, row.names = 1L)))
header
# REG UF ESTACAO
# V2 CO DF BRASILIA
rest_of_data <- read.csv(text = alldat[ind:(length(alldat))])
rest_of_data
# Date Hora PRECIP TEMP
# 1 01/01/2020 0000 UTC 0 20.0
# 2 01/01/2000 0100 UTC 0 19.5
# 3 01/01/2000 0200 UTC 0 21.0
然后我们可以cbind
:
rownames(header) <- NULL
cbind(rest_of_data, header)
# Date Hora PRECIP TEMP REG UF ESTACAO
# 1 01/01/2020 0000 UTC 0 20.0 CO DF BRASILIA
# 2 01/01/2000 0100 UTC 0 19.5 CO DF BRASILIA
# 3 01/01/2000 0200 UTC 0 21.0 CO DF BRASILIA
(清除行名纯粹是为了在cbind
ing 时抢占警告,并非严格要求。)
推荐阅读
- scala - Spark Scala数据框:应用select()后仍可访问列
- c# - 无法在asp.net c#中保存可编辑div的innerText/innerHTML
- c# - 创建两个不同的随机变量
- google-bigquery - 如何更新bigquery的重复数组(字段)的所有元素
- android - 如何在 Mvvm 的视图模型中取消 api 请求?
- javascript - React Native 不显示用户详细信息,而是显示白卡
- angular - 打字稿角度中的动态矩阵结构
- c - 当子进程暂停时,如何让父进程开始工作?c编程
- python - 写一个函数退出程序,根据名字和姓氏的首字母自动生成用户名
- flutter - 如何在颤动中增加边界半径限制?