我试图将csv文件读入R.问题是该文件有2个分隔符,我不知道如何将其作为3列数据帧读取;即第一个,第二个和一年。 这是文件的样子示例:
</xsl:stylesheet>
我已经使用[Alin Deutsch, Mary F. Fernandez, 1998],
[Alin Deutsch, Daniela Florescu, 1998],
和fread()
尝试了sep="["
功能,但它不起作用,R只是将行读作1列向量
感谢
答案 0 :(得分:6)
您可以使用sep=","
阅读该文件,然后删除额外的括号:
df <- read.csv(file = textConnection("[Alin Deutsch, Mary F. Fernandez, 1998],
[Alin Deutsch, Daniela Florescu, 1998],"),stringsAsFactors=FALSE,head=FALSE)
df <- df[,-4]
df$V1 <- gsub("\\[","",df$V1)
df$V3 <- gsub("\\]","",df$V3)
names(df) <- c("first","second","year")
df
输出
first second year
1 Alin Deutsch Mary F. Fernandez 1998
2 Alin Deutsch Daniela Florescu 1998
答案 1 :(得分:6)
1)read.table / sub 使用sep = ","
和comment.char = "]"
阅读。这将拆分字段并删除尾随]
及其后的所有内容,然后我们可以[
从V1
移除sub
:
Lines <- "[Alin Deutsch, Mary F. Fernandez, 1998],
[Alin Deutsch, Daniela Florescu, 1998],"
DF <- read.table(text = Lines, sep = ",", comment.char = "]", as.is = TRUE,
strip.white = TRUE, # might not need this one
col.names = c("Name1", "Name2", "Year"))
DF <- transform(DF, Name1 = sub("[", "", Name1, fixed = TRUE))
,并提供:
> DF
Name1 Name2 Year
1 Alin Deutsch Mary F. Fernandez 1998
2 Alin Deutsch Daniela Florescu 1998
2)read.pattern 另一种可能性是在gsubfn中使用read.pattern
。这种模式假定每行以[,有三个逗号开头,最后一个有一个]开头。这与问题中的内容相对应,但如果不是这种情况,则需要更改正则表达式。
library(gsubfn)
read.pattern(text = Lines, pattern = ".(.*?),(.*?),(.*?).,", as.is = TRUE,
strip.white = TRUE, # might not need this one
col.names = c("Name1", "Name2", "Year"))
给予同样的。
答案 2 :(得分:0)
我已经尝试过这个解决方案并且有效。
首先,我删除了#34; [&#34;和&#34;]&#34;使用gsub
clean <- function(x){
gsub("\\[|\\]","",x)
}
sample_clean <- sapply(sample,clean)
head(sample_clean)
然后,我使用str_split_fixed
data <- str_split_fixed(sample_clean,",",3)