R 骨料使用;“因素”;那是安娜
我正在努力将数据帧聚合为我想要的格式。数据框包含一系列部分,以及执行的测试列表(长度和宽度),以及每个测量的下限和上限(LL和UL)。有些测试没有一个或另一个限制。我试图计算有多少部件具有给定的“test LL UL”组合,包括那些以NA为限制条件的测试 到目前为止,我尝试了以下内容:R 骨料使用;“因素”;那是安娜,r,aggregate,na,R,Aggregate,Na,我正在努力将数据帧聚合为我想要的格式。数据框包含一系列部分,以及执行的测试列表(长度和宽度),以及每个测量的下限和上限(LL和UL)。有些测试没有一个或另一个限制。我试图计算有多少部件具有给定的“test LL UL”组合,包括那些以NA为限制条件的测试 到目前为止,我尝试了以下内容: df<-read.table(header = TRUE, text = " Part Test LL UL A L 20 40 A W 5 7 B L
df<-read.table(header = TRUE, text = "
Part Test LL UL
A L 20 40
A W 5 7
B L 20 NA
B W 5 7
C L 20 40
C W 10 30
")
aggregate(data=df,Part~Test+LL+UL,FUN=length,na.action=na.pass)
我期望得到的是:
Test LL UL Part
1 W 5 7 2
2 W 10 30 1
3 L 20 40 2
4 L 20 NA 1
任何帮助都将不胜感激 根据Jimbou的建议,以下工作(但感觉有点凌乱):
dfdplyr
很好地处理了这个问题:
library(dplyr)
df %>% group_by(Test,LL,UL) %>% summarise( n() )
包{dplyr}可以与函数groupby()
和summary()
一起使用:
df您可以使用df[is.NA(df)]将NA转换为字符@Jimbou这可能会更改列的类别。@nicola聚合
函数在使用前强制by
元素为因子。所以这不重要。@Jimbou我不是说结果,而是说原始的data.frame
。按您的方式设置NA
将修改某些列。@nicola是的,您完全正确。备份df
或仅转换目标列df$UL[is.na(df$UL)]
df<-read.table(header = TRUE, text = "
Part Test LL UL
A L 20 40
A W 5 7
B L 20 NA
B W 5 7
C L 20 40
C W 10 30
")
df[is.na(df)] <- "NA"
df<-aggregate(data=df,Part~Test+LL+UL,FUN=length,na.action=na.pass)
df$UL<-as.numeric(df$UL)
library(dplyr)
df %>% group_by(Test,LL,UL) %>% summarise( n() )
df <- data.frame(Part = c("A","A","B","B","C","C"),
Test = c("L","W","L","W","L","W"),
LL = c(20,5,20,5,20,10),
UL = c(40,7,NA,7,40,30))
grouped <- dplyr::group_by(df, Test, LL, UL)
summarize(grouped, count = n())
## Test LL UL count
## (fctr) (dbl) (dbl) (int)
##1 L 20 40 2
##2 L 20 NA 1
##3 W 5 7 2
##4 W 10 30 1