在R中转置CSV文件,使每行仅包含一个数据点
在R中高效处理CSV格式转换(无需嵌套循环)
不用嵌套循环,直接利用向量配对和数据框操作就能快速完成格式转换,步骤如下:
1. 准备数据
假设你已经将CSV的两行数据读取为两个向量(row1 对应第一行的键,row2 对应第二行的值):
# 转换前的两行数据拆分后得到的向量 row1 <- c("1", "2", "400", "410", "420", "430", "450", "490", "75700", "75701", "77035", "77035", "77035", "77035") row2 <- c("*", "Facility Name", "1234 Test Street", "Michigan", "49503", "123-456-7891", "", "MPI_ID_TYPE", "1", "Sober Living Community", "Clothing", "Diapers", "Food Pantry")
2. 调整值向量(按需替换占位值)
根据转换需求,对row2中的部分值进行替换,确保长度与row1一致:
# 替换对应位置的值 row2 <- c( row2[1:3], "TestCity", # 替换原Michigan "TestState", # 替换原49503 "12345", # 替换原123-456-7891 "123-456-7891",# 替换原空值 row2[8:13] )
3. 配对键值并过滤无效行
将两个向量配对成数据框,过滤掉不需要的行(比如row1中490对应的空值行):
# 配对键值对 key_value_df <- data.frame( key = row1, value = row2, stringsAsFactors = FALSE ) # 过滤掉不需要的行 key_value_df <- key_value_df[key_value_df$key != "490", ]
4. 输出为目标格式
用write.table直接输出成所需的CSV格式,无需循环:
# 写入文件,设置分隔符为逗号,不输出行名和列名 write.table( key_value_df, file = "output.csv", sep = ",", row.names = FALSE, col.names = FALSE, quote = FALSE )
最终输出结果
运行上述代码后,生成的output.csv内容如下:
1,* 2,Facility Name 400,123 Test Street 410,TestCity 420,TestState 430,12345 450,123-456-7891 75700,MPI_ID_TYPE 75701,1 77035,Sober Living Community 77035,Clothing 77035,Diapers 77035,Food Pantry
如果你的原始数据是通过read.csv读取的两行数据框,可先转成向量再处理:
# 读取原始CSV df <- read.csv("input.csv", header = FALSE, stringsAsFactors = FALSE) row1 <- as.character(df[1, ]) row2 <- as.character(df[2, ])
内容的提问来源于stack exchange,提问作者Sam Kujawski
相关产品推荐
相关产品推荐

