r - 如何从 CSV 中提取特定行并在 R 中格式化数据?
问题描述
我有一个包含数千行的 CSV 文件,如下所示:
1001;basket/files/legobrick.mp3
4096;basket/files/sunshade.avi
2038;data/lists/blockbuster.ogg
2038;data/random/noidea.dat
我想将此写入一个新的 CSV 文件,但仅包含包含“.mp3”或“.avi”的行。输出文件应该只有一列,如下所示:
"basket/files/legobrick.mp3#1001",
"basket/files/sunshade.avi#4096",
所以第一列应该添加到第二列的后缀,并用井号分隔,每一行都应该被引用并用逗号分隔,如上所示。
源 CSV 文件不包含带有列名的标题。这只是数据。
有人可以告诉我如何在 R 中编写代码吗?
编辑(在标记答案之后):这个问题不是重复的,因为它涉及过滤行并且输出代码格式完全不同,需要不同的处理方法。标记的答案也完全不同,这确实支持了我的断言,即这不是重复的。
解决方案
您可以通过以下方式执行此操作:
#Read the file with ; as separator
df <- read.csv2(text = text, header = FALSE, stringsAsFactors = FALSE)
#Filter the rows which end with "avi" or "mp3"
inds <- grepl("avi$|mp3$", df$V2)
#Create a new dataframe by pasting those rows with a separator
df1 <- data.frame(new_col = paste(df$V2[inds], df$V1[inds], sep = "#"))
df1
# new_col
#1 basket/files/legobrick.mp3#1001
#2 basket/files/sunshade.avi#4096
#Write the csv
write.csv(df1, "/path/of/file.csv", row.names = FALSE)
或者,如果您希望将其作为文本文件,您可以执行
write.table(df1, "path/test.txt", row.names = FALSE, col.names = FALSE, eol = ",\n")
数据
text = "1001;basket/files/legobrick.mp3
4096;basket/files/sunshade.avi
2038;data/lists/blockbuster.ogg
2038;data/random/noidea.dat"
推荐阅读
- python-3.x - 我使用 python 制作了一个 wordcloud,我想查看 wordcloud 中的单词,如有必要,将它们从图像中删除
- crystal-reports - Crystal Reports - 获取已故记录和在世记录配偶的信息
- excel - 获取二维数组中特定列的最大值
- python - 无法连接到 Oracle 本地数据库 - cx_Oracle.DatabaseError: ORA-12541: TNS:no listener
- database - 如何将 Amazon ORACLE AWS RDS 中 TEMP TABLESPACE 的表 DBA_TEMP_FILES 中的 AUTOEXTENSIBLE 列更改为 YES?
- java - Spring 5 Oauth2 - 如何在我的资源服务器中提供检查令牌 URL?
- css-selectors - 如何在 WebDriverIO 中使用自定义类名
- javascript - FullCalendar - 显示过去的日期
- api - Sonos API 作为回报发送的验证码太短?
- angular - 如何使用 RxJs 在 Angular 中限制并发 API 请求