一些示例数据
我有三个列表
loc <- c("A","A","A","B","B","B")
sub.loc <- c(1,2,3,1,2,3)
set.seed(123)
df1 <- as.data.frame(cbind(loc,sub.loc, round(rnorm(6),digits =2)))
df2 <- as.data.frame(cbind(loc,sub.loc, round(rnorm(6),digits =2)))
df3 <- as.data.frame(cbind(loc,sub.loc, round(rnorm(6),digits =2)))
list.name <- list(df1,df2,df3)
我想生成一个包含第三列V3
的均值和sd的文件。
Something like:
loc sub.loc V3 v4
A 1 mean(c(-0.56,0.46,0.4)) sd(c(-0.56,0.46,0.4))
A 2 mean(c(-0.23,-1.27,0.11)) sd(c(-0.23,-1.27,0.11))
A 3 mean(c(-0.56,-0.69, 1.56)) sd(c(-0.56,-0.69, 1.56))
B 1 mean(c(0.07,-0.45,1.79)) sd(c(0.07,-0.45,1.79))
B 2 mean(c(0.13,1.22,0.5)) sd(c(0.13,1.22,0.5))
B 3 mean(c(1.72,0.36,-1.97)) sd(c(1.72,0.36,-1.97))
我在'V3`列中的实际数据有NAs
我想过使用lapply
lapply(list.name, function(x) mean(x, na.rm = T))
lapply(list.name, function(x) sd(x, na.rm = T))
但是他们都给了我NAs
答案 0 :(得分:1)
可以使用dplyr
完成此操作。首先,我不确定您的上述样本数据与您的实际数据的匹配程度,但现在所有“数字”值都是因素。你真的不应该在cbind()
内使用as.data.frame()
,你可以将其排除在外。
但是根据上面的示例数据,我们可以将数据堆叠到一个更大的data.frame中,然后执行一个简单的group_by来获取所需的值
library(dplyr)
bind_rows(list.name, .id="from") %>%
mutate(V3=as.numeric(as.character(V3))) %>% # fix the factors from the sample
group_by(loc, sub.loc) %>%
summarize(mean=mean(V3, na.rm=T), sd=sd(V3, na.rm=T))
答案 1 :(得分:0)
目前,您在整个数据框架中运行aws emr create-cluster \
--applications Name=Spark Name=Ganglia \
--ec2-attributes "${EC2_PROPERTIES}" \
--service-role EMR_DefaultRole \
--release-label emr-5.8.0 \
--log-uri ${S3_LOGS} \
--enable-debugging \
--name ${CLUSTER_NAME} \
--region us-east-1 \
--instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=4,InstanceType=m3.xlarge)
和mean()
,其中包含非数字列,因此sd()
。
考虑基础R的NA
(面向对象的by
包装器),首先使用tapply
堆叠数据框列表,然后在 loc 上运行聚合, sub.loc 分组:
rbind