出于某种原因,aggregate
给了我错误的列名,即使数据仍然正确。谁能告诉我为什么(我做错了什么)?
例如,使用数据框df
:
df <- structure(list(Site = c(1L, 1L, 1L, 2L, 2L, 2L), Sample = c(1L,
2L, 3L, 1L, 2L, 3L), Diameter = 1:6), .Names = c("Site", "Sample",
"Diameter"), class = "data.frame", row.names = c(NA, -6L))
看起来像
Site Sample Diameter
1 1 1 1
2 1 2 2
3 1 3 3
4 2 1 4
5 2 2 5
6 2 3 6
我运行以下代码
# Add column to calculate area from diameter
df['Area'] = ((df['Diameter']/2)^2)*pi
# Subset sites
Site1 <- subset(df, Site == "1")
# Calculate total area for each site
Site1_area <- aggregate(Site1$Area, by=list(Sample=Site1$Sample), sum, na.rm=TRUE)
Site1_area
这会将新数据框Site1_area
设为
Sample Diameter
1 1 0.7853982
2 2 3.1415927
3 3 7.0685835
已保留计算区域,但现在列名称错误地显示为Diameter
而不是Area
。我知道我可以使用
colnames(Site1_area) <- c("Sample", "Area")
但我觉得这个列没有正确命名,这似乎很奇怪。谁能告诉我为什么?我做错了吗?
非常感谢!
答案 0 :(得分:3)
你犯了一个错误,当你这样做时没有抓到:
df['Area'] = ((df['Diameter']/2)^2)*pi
应该是:
df[['Area']] = ((df[['Diameter']]/2)^2)*pi
在你这样做之后你有:
> df
Site Sample Diameter Diameter
1 1 1 1 0.7853982
2 1 2 2 3.1415927
3 1 3 3 7.0685835
4 2 1 4 12.5663706
5 2 2 5 19.6349541
6 2 3 6 28.2743339
所以你从未真正拥有一个名为“Area”的列。如果您希望标签简单,请尝试使用aggregate.formula方法:
Site1_area2 <- aggregate(Area~Sample, data=Site1, sum, na.rm=TRUE)
> Site1_area2
Sample Area
1 1 0.7853982
2 2 3.1415927
3 3 7.0685835