在 R 中,尝试将参差不齐的 CSV 转换为 data.frame of Value,列表



我有一个输入文件,如下所示:

1A10, 77002, 77003, 77010, 77020
1A20, 77002, 77006, 77007, 77019
1A30, 77006, 77019, 77098
1A40, 77007, 77019, 77027, 77098
1A50, 77005, 77007, 77019, 77024, 77027, 77046, 77081, 77098, 77401
etc....

我想创建一个数据框 (tibble),其中第一列与 csv 的第一列相同,第二列是对应于其余列的列表。

我失败得很惨。这是我的最后一次失败

library(stringr)
library(tidyverse)
options(stringsAsFactors = FALSE)
infile <- "~/Rprojects/CrimeStats/BeatZipcodes.csv"
# create empty data frame
BeatToZip <- data_frame(
    beat=character(),
    zips=list()
)
con=file(infile,open="r")
line=readLines(con) 
long=length(line)
for (i in 1:long){
    print(line[i])
    line[i] <- trimws(line[i])
    beat <- str_split(line[i],", *")[[1]][1]
    zips <- as.list(str_split(line[i],", *")[[1]][-1])
    temp <- data_frame(beat, zips)
    BeatToZip <- rbind(BeatToZip, temp)
}
close(con)
读取

文件后的一个选项,read.csvfill = TRUE

library(tidyverse)
df1 <- read.csv(infile, fill = TRUE, header = FALSE)

gatherfirst列之外的所有列(按第一列分组),summarise其他列成一个list

df1 %>%
   gather(key, val, -1, na.rm = TRUE) %>%
   group_by(key) %>%
   summarise(listCol = list(val))

最新更新