R-删除符合特定条件的行
我实际上正在做一个关于R的学校项目。我想从我的数据库中删除在特定变量中包含特定字符的观察结果 更准确地说,我正在构建一个方框图来比较两个变量,年份和电影类型。但在我的.csv文件中,有些行包含;在电影的标题中,它完全弄乱了我的数据,就像我的分隔符一样;也如何删除58000上的第5行 我没有在搜索栏中找到我的答案 提前谢谢大家, 阿克塞尔R-删除符合特定条件的行,r,delete-row,R,Delete Row,我实际上正在做一个关于R的学校项目。我想从我的数据库中删除在特定变量中包含特定字符的观察结果 更准确地说,我正在构建一个方框图来比较两个变量,年份和电影类型。但在我的.csv文件中,有些行包含;在电影的标题中,它完全弄乱了我的数据,就像我的分隔符一样;也如何删除58000上的第5行 我没有在搜索栏中找到我的答案 提前谢谢大家, 阿克塞尔 你真的应该包括一个例子,但我想我可以给你一些代码,应该做你想要的 dat = data.frame(title = c("Babe", "Toy Story",
你真的应该包括一个例子,但我想我可以给你一些代码,应该做你想要的
dat = data.frame(title = c("Babe", "Toy Story", "Mulan;"), rating = c(3,4,5))
> dat
title rating
1 Babe 3
2 Toy Story 4
3 Mulan; 5
dat = dat[!grepl(";", dat$title), ]
> dat
title rating
1 Babe 3
2 Toy Story 4
在将csv文件作为数据帧读入之前,可以尝试删除csv文件中的这些行。比如:
## first read in as text
x <- readLines('file.csv')
## I counted 31 columns in your data--assuming that's correct, remove lines that don't
## have 30 semicolons
xClean <- x[sapply(gregexpr(';', x), function(n) length(n) == 30)]
## now read the cleaned text to a data.frame
dat <- read.table(text = xClean, sep = ';', header = TRUE)
编辑:
在我看来,如果包含这些有问题行的清理版本,而不是直接删除它们,可能会更有帮助。为了清理并包括它们,这很可能会起作用:
x <- readLines('file.csv')
xSplit <- strsplit(x, ';')
xClean <- sapply(xSplit, function(s) {
paste(paste(s[0:(length(s) - 30)], collapse = ' '),
paste(s[(length(s) - 29):length(s)], collapse = ';'),
sep = ';')
})
dat <- read.table(text = xClean, sep = ';', header = TRUE)
谢谢现在,当我添加这行代码时,出现了错误警告消息:In grepl;,数据$title:la chaîne de caractères entrée 97在cet环境语言中不正确。我发现这可能与编码有关,但我真的不知道如何处理它。@AxelPHILIP将数据文件的头添加到问题中。我需要查看数据以修复itI我将其添加到问题中。正如你们所看到的,我有奇怪的年份值,而在我的csv文件中,所有年份都是1975年或2013年。@Axelphip我明白了。您的文件是excel文件吗?是的,更准确地说是.csv文件;或者将其删除。@PraveenRKaruppannan是否直接在文件中?由于这是一个练习,我认为这是不允许的…在将数据集导入R之后。您可以替换;
x <- readLines('file.csv')
xSplit <- strsplit(x, ';')
xClean <- sapply(xSplit, function(s) {
paste(paste(s[0:(length(s) - 30)], collapse = ' '),
paste(s[(length(s) - 29):length(s)], collapse = ';'),
sep = ';')
})
dat <- read.table(text = xClean, sep = ';', header = TRUE)