写一个严谨的R脚本,以所读入文件每三行为循环,将每个循环第一行从右向左数的第一个括号内数据输入至新文件第一列,将每个循环第三行数据输入至新文件第二列,直至读取到空行时终止循环
时间: 2024-03-26 07:38:16 浏览: 48
好的,以下是 R 语言的代码:
```R
# 读入文件
data <- readLines("your_file_path")
# 初始化两个向量,分别用于存放第一列和第二列数据
col1 <- c()
col2 <- c()
# 循环处理每三行数据
for (i in seq(1, length(data), by = 3)) {
# 如果第一行为空行,则跳出循环
if (data[i] == "") {
break
}
# 获取第一行数据中属于第一个括号内的数据
first_line <- data[i]
first_bracket <- gsub(".*\\((.*?)\\).*", "\\1", first_line)
# 将第一个括号内数据输入第一列
col1 <- c(col1, first_bracket)
# 获取第三行数据
third_line <- data[i+2]
# 将第三行数据输入第二列
col2 <- c(col2, third_line)
}
# 将两列数据合并成数据框
result <- data.frame(col1, col2)
# 将结果写入新文件
write.table(result, file = "output_file_path", sep = "\t", row.names = FALSE, quote = FALSE)
```
说明:
- `readLines()` 函数用于读入文件,返回一个字符向量,其中每个元素为文件中的一行。
- `for` 循环中的 `seq(1, length(data), by = 3)` 表示从 1 开始,每次加 3,直到达到 `data` 向量的长度为止,即每三行为一组。
- 如果读取到的第一行是空行,则跳出循环。
- `gsub()` 函数用于从第一行数据中提取第一个括号内的数据,正则表达式 `".*\\((.*?)\\).*"` 表示匹配任意字符和左括号之间的内容和右括号之间的内容,且只保留括号内的数据,且使用非贪婪模式。
- `data.frame()` 函数用于将两个向量合并成一个数据框。
- `write.table()` 函数用于将结果写入新文件,其中 `sep` 参数表示分隔符,`row.names` 和 `quote` 参数均设置为 `FALSE` 表示不输出行名和引号。
阅读全文