Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将r中相同的实例分组为一个,同时生成频率和平均统计数据?_R_Dataframe_Merge - Fatal编程技术网

如何将r中相同的实例分组为一个,同时生成频率和平均统计数据?

如何将r中相同的实例分组为一个,同时生成频率和平均统计数据?,r,dataframe,merge,R,Dataframe,Merge,我正处于清理/整理数据的最后阶段,希望您能就此步骤提出建议。我是R新手,不完全了解数据帧或其他数据类型是如何工作的。(我正在努力学习,但有一个项目到期,所以需要一个快速的解决方案)。我已经从CSV文件导入了数据 我想将具有相同(日期、ID1、ID2、ID3)的实例分组。我想要输出中所有统计数据的平均值,还需要一个新的列,其中包含分组的实例数 注意:ID3包含。在分组之前,我想将它们重命名为“na” 我试过解决办法 tdata$ID3[is.na(tdata$ID3)] <- "NA"

我正处于清理/整理数据的最后阶段,希望您能就此步骤提出建议。我是R新手,不完全了解数据帧或其他数据类型是如何工作的。(我正在努力学习,但有一个项目到期,所以需要一个快速的解决方案)。我已经从CSV文件导入了数据

我想将具有相同(日期、ID1、ID2、ID3)的实例分组。我想要输出中所有统计数据的平均值,还需要一个新的列,其中包含分组的实例数

注意: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工作得很好!我欣赏你优雅的解决方案。没想到会是一句话!工作得很有魅力!我欣赏你优雅的解决方案。没想到会是一句话!