首页 > 解决方案 > 如何从 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 中编写代码吗?

编辑(在标记答案之后):这个问题不是重复的,因为它涉及过滤行并且输出代码格式完全不同,需要不同的处理方法。标记的答案也完全不同,这确实支持了我的断言,即这不是重复的。

标签: 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"

推荐阅读