如何将r中相同的实例分组为一个,同时生成频率和平均统计数据?
我正处于清理/整理数据的最后阶段,希望您能就此步骤提出建议。我是R新手,不完全了解数据帧或其他数据类型是如何工作的。(我正在努力学习,但有一个项目到期,所以需要一个快速的解决方案)。我已经从CSV文件导入了数据 我想将具有相同(日期、ID1、ID2、ID3)的实例分组。我想要输出中所有统计数据的平均值,还需要一个新的列,其中包含分组的实例数 注意:ID3包含。在分组之前,我想将它们重命名为“na” 我试过解决办法如何将r中相同的实例分组为一个,同时生成频率和平均统计数据?,r,dataframe,merge,R,Dataframe,Merge,我正处于清理/整理数据的最后阶段,希望您能就此步骤提出建议。我是R新手,不完全了解数据帧或其他数据类型是如何工作的。(我正在努力学习,但有一个项目到期,所以需要一个快速的解决方案)。我已经从CSV文件导入了数据 我想将具有相同(日期、ID1、ID2、ID3)的实例分组。我想要输出中所有统计数据的平均值,还需要一个新的列,其中包含分组的实例数 注意:ID3包含。在分组之前,我想将它们重命名为“na” 我试过解决办法 tdata$ID3[is.na(tdata$ID3)] <- "NA"
tdata$ID3[is.na(tdata$ID3)] <- "NA"
tdata[["ID3"]][is.na(tdata[["ID3"]])] <- "NA"
我尝试了这个解决方案:
但是,我没有成功地合并必须分组和测试相似性的列
DF <- merge(tdata$date, tdata$ID1, tdata$ID2, tdata$ID3, by = "Name", all = T)
Error in fix.by(by.x, x) : 'by' must specify uniquely valid columns
DF我们可以用dplyr
来实现这一点。按“ID”列分组后,在分组变量中添加“日期”和“n”,并获得“统计”列的mean
library(dplyr)
df1 %>%
group_by(ID1, ID2, ID3) %>%
group_by(date = first(date), n =n(), add=TRUE) %>%
summarise_at(vars(matches("stat")), mean)
注意:关于将“NA”更改为“big234”,我们可以将“ID3”转换为字符
类,并在执行上述操作之前对其进行更改
df1$ID3 <- as.character(df1$ID3)
df1$ID3[is.na(df1$ID3)] <- "big234"
df1$ID3我们可以用dplyr
来实现这一点。按“ID”列分组后,在分组变量中添加“日期”和“n”,并获得“统计”列的mean
library(dplyr)
df1 %>%
group_by(ID1, ID2, ID3) %>%
group_by(date = first(date), n =n(), add=TRUE) %>%
summarise_at(vars(matches("stat")), mean)
注意:关于将“NA”更改为“big234”,我们可以将“ID3”转换为字符
类,并在执行上述操作之前对其进行更改
df1$ID3 <- as.character(df1$ID3)
df1$ID3[is.na(df1$ID3)] <- "big234"
df1$ID3虽然我发现akrun提出的dplyr
解决方案使用起来非常直观,但也有一个不错的数据。表
解决方案:
与akrun类似,我假设NA值已转换为“big234”以获得所需的结果
library(data.table)
# convert data.frame to data.table
data <- data.table(df1)
# return the desired output
data[, c(.N, lapply(.SD, mean)),
by = list(date, ID1,ID2, ID3)]
库(data.table)
#将data.frame转换为data.table
数据虽然我发现akrun提出的dplyr
解决方案使用起来非常直观,但也有一个不错的数据。表
解决方案:
与akrun类似,我假设NA值已转换为“big234”以获得所需的结果
library(data.table)
# convert data.frame to data.table
data <- data.table(df1)
# return the desired output
data[, c(.N, lapply(.SD, mean)),
by = list(date, ID1,ID2, ID3)]
库(data.table)
#将data.frame转换为data.table
数据请检查您的第一行所需输出。预期的平均值不同。很糟糕,是的,它应该是12-03-07 abc123,wxy456,pqr457,3,20,40,60。请检查您的第一行期望输出。期望的平均值是不同的。我很糟糕,是的,它应该是12-03-07 abc123,wxy456,pqr457,3,20,40,60工作得很好!我欣赏你优雅的解决方案。没想到会是一句话!工作得很有魅力!我欣赏你优雅的解决方案。没想到会是一句话!