【问题标题】:Separating samples when importing a csv in R在 R 中导入 csv 时分离样本
【发布时间】:2021-08-02 02:08:50
【问题描述】:

我是 R 新手,但想将它用于一些收集数据的统计工具。我正在尝试从仪器输出中导入原始数据,但要这样做,我需要从机器显示器中取出无用的 cmets,然后将多个样本分离到它们自己的数据帧中。数据如下:

////this is some preamble
////for sample 1 that would graph
////data on the machines display

1 10
2 20
3 30

///This is the preamble
////for the second sample

1 11
2 19
3 32
4 41
5 50

////this is closing statements
////and final plot command 
////for the machine's display

我目前正在尝试使用空格分隔符导入它。如果我只有一个示例,我知道我可以跳过前四行,然后为列添加标题,如

library(readr)
DATA <- read_table2("DATA.txt", col_names = FALSE, skip = 4)
colnames(DATA) <- c("X","Y")

但我不知道如何将示例 2 和其余不重要的文本分开。 可能出现的另一个问题是样本一和样本二的分离发生在不同的行上,具体取决于文件。所以我想我需要在制作表格之前导入文本文件进行扫描。

我知道这有点像集群,但我很感激任何帮助。

【问题讨论】:

  • 您可以使用comment="/" 参数跳过评论行。使用第一个变量中的1's 来标识每个组的开头。

标签: r dataframe csv


【解决方案1】:

这应该可以帮助您入门。我使用的是基础 R,但如果您愿意,您可以随时转换为 tibble。

DATA <- read.table("DATA.txt", header=FALSE, comment="/")
colnames(DATA) <- c("X","Y")
begin <- which(DATA$X==1)
end <- c(diff(begin), nrow(DATA))
groups <- mapply(":", begin, end)
DATA.lst <- lapply(groups, function(g) DATA[g, ])
names(DATA.lst) <- sprintf("Group%0.2i", seq(length(groups)))
DATA.lst
# $Group01
#    X  Y
# 1  1 10
# 2  2 20
# 3  3 30
# 
# $Group02
#    X  Y
# 4  1 11
# 5  2 19
# 6  3 32
# 7  4 41
# 8  5 50

DATA.lst 是数据帧列表。您可以使用以下代码提取它们,但如果您计划对每个代码执行相同的分析,这可能不是您的最佳选择。 R 可以轻松处理列表中的所有数据帧,从而节省您为每个数据帧编写代码:

for (i in 1:2) {assign(names(DATA.lst)[i], DATA.lst[[i]])}

【讨论】:

    猜你喜欢
    • 2018-10-25
    • 2013-01-29
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2019-04-29
    • 1970-01-01
    • 2019-12-12
    相关资源
    最近更新 更多