在R中的长文件和宽文件中选择主题的第一个实例
Selecting First instance of subject in long and wide file in R
我有一个像这样又长又宽的大数据集:
StudentID <- factor(c(1, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5))
Grade <- factor(c(10, 10, 11, 11, 11, 10, 10, 10, 12, 9, 9))
data <- data.frame(StudentID, Grade)
对于每个学生 ID,他们的年级可能有很多实例(它们始终相同)。
减少此数据集以便每个学生只列出一次他们的年级水平的最有效方法是什么?
到目前为止,我已尝试使用 split 函数为每个学生创建列出所有成绩的列表,然后仅 select 应用到列表中的第一个元素:
index.byID <- split(data$Grade, data$StudentID)
sapply(index.byID, "[[", 1)
因为我的数据很大(超过 300K 行),所以索引需要超过 25 分钟。
如果您能提供任何帮助,那就太好了!
。 .
你可以试试unique
unique(data)
@akrun 的回答很简单,只是为了回答问题。但是,如果您想保留第一条记录的其他列的值,我发现使用 plyr 包中的 ddply 是一种干净高效的替代方法。这是此方法的代码。
library(plyr)
StudentID <- factor(c(1, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5))
Grade <- factor(c(10, 10, 11, 11, 11, 10, 10, 10, 12, 9, 9))
data <- data.frame(StudentID, Grade,
ExtraColumn=1:length(StudentID))
ddply(data, .(StudentID, Grade), function(x) head(x, 1))
我有一个像这样又长又宽的大数据集:
StudentID <- factor(c(1, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5))
Grade <- factor(c(10, 10, 11, 11, 11, 10, 10, 10, 12, 9, 9))
data <- data.frame(StudentID, Grade)
对于每个学生 ID,他们的年级可能有很多实例(它们始终相同)。
减少此数据集以便每个学生只列出一次他们的年级水平的最有效方法是什么?
到目前为止,我已尝试使用 split 函数为每个学生创建列出所有成绩的列表,然后仅 select 应用到列表中的第一个元素:
index.byID <- split(data$Grade, data$StudentID)
sapply(index.byID, "[[", 1)
因为我的数据很大(超过 300K 行),所以索引需要超过 25 分钟。
如果您能提供任何帮助,那就太好了!
。 .
你可以试试unique
unique(data)
@akrun 的回答很简单,只是为了回答问题。但是,如果您想保留第一条记录的其他列的值,我发现使用 plyr 包中的 ddply 是一种干净高效的替代方法。这是此方法的代码。
library(plyr)
StudentID <- factor(c(1, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5))
Grade <- factor(c(10, 10, 11, 11, 11, 10, 10, 10, 12, 9, 9))
data <- data.frame(StudentID, Grade,
ExtraColumn=1:length(StudentID))
ddply(data, .(StudentID, Grade), function(x) head(x, 1))