使用列值从大型数据集中选择特定行
Selecting specific rows from a large dataset using column values
我有一个大数据集(大约 2000 行和 38 列),看起来像这样(某些列中缺少数据):
species crab cmass gill gmass treatment months avglw avgils
222 Cm 65 34.273 p 0.198 Newtons Cove 0 68.108 93.181
223 Cm 57 33.506 p 0.166 Newtons Cove 0 37.908 39.683
225 Cm 65 34.273 p 0.198 Newtons Cove 0 68.108 93.181
231 Cm 62 30.852 p 0.147 Newtons Cove 0 37.285 89.823
239 Cm 65 34.273 p 0.198 Newtons Cove 0 68.108 93.181
240 Cm 57 33.506 p 0.166 Newtons Cove 0 37.908 39.683
241 Cm 62 30.852 p 0.147 Newtons Cove 0 37.285 89.823
242 Cm 63 22.456 p 0.093 Newtons Cove 0 70.005 67.687
243 Cm 59 22.422 p 0.113 Newtons Cove 0 21.834 39.481
每个螃蟹编号有多行,我希望能够对每个螃蟹编号的行进行平均,或者 select 每个螃蟹编号的第一个唯一行,然后排除后续行。
例如:我想对第 222、225、239 行进行平均,因为它们都来自螃蟹“65”;
或者:我想 select 第 222 行,然后排除 225 和 239,因为它们来自已经 selected 的螃蟹。
我尝试过使用 unique() 和 sqldf(),但它们都不适合我。
如有任何建议,我们将不胜感激。谢谢!
对于平均值,您可能想尝试将数据放入 data.table
,然后应用一个函数:
mydata <- data.table(mydata)
mydata[, lapply(.SD, mean), .SDcols = c("cmass", "gmass"), by = "crab"]
假设您想要获得 cmass
和 gmass
的平均值。
对于你问题的另一部分,我不太确定。您可以尝试只在您感兴趣的列上设置一个键,然后调用 unique
:
setkey(mydata, crab)
unique(mydata)
然后它将按 crab
排序,unique
将删除具有重复值 crab
的行。那是你想要的吗?
不清楚预期的输出是什么
library(dplyr)
df1 %>%
group_by(species, crab, treatment, gill, months) %>%
summarise_each(funs(mean=mean(., na.rm=TRUE)))
或者可能是
df1 %>%
group_by(crab) %>%
slice(1)
我有一个大数据集(大约 2000 行和 38 列),看起来像这样(某些列中缺少数据):
species crab cmass gill gmass treatment months avglw avgils
222 Cm 65 34.273 p 0.198 Newtons Cove 0 68.108 93.181
223 Cm 57 33.506 p 0.166 Newtons Cove 0 37.908 39.683
225 Cm 65 34.273 p 0.198 Newtons Cove 0 68.108 93.181
231 Cm 62 30.852 p 0.147 Newtons Cove 0 37.285 89.823
239 Cm 65 34.273 p 0.198 Newtons Cove 0 68.108 93.181
240 Cm 57 33.506 p 0.166 Newtons Cove 0 37.908 39.683
241 Cm 62 30.852 p 0.147 Newtons Cove 0 37.285 89.823
242 Cm 63 22.456 p 0.093 Newtons Cove 0 70.005 67.687
243 Cm 59 22.422 p 0.113 Newtons Cove 0 21.834 39.481
每个螃蟹编号有多行,我希望能够对每个螃蟹编号的行进行平均,或者 select 每个螃蟹编号的第一个唯一行,然后排除后续行。
例如:我想对第 222、225、239 行进行平均,因为它们都来自螃蟹“65”; 或者:我想 select 第 222 行,然后排除 225 和 239,因为它们来自已经 selected 的螃蟹。
我尝试过使用 unique() 和 sqldf(),但它们都不适合我。
如有任何建议,我们将不胜感激。谢谢!
对于平均值,您可能想尝试将数据放入 data.table
,然后应用一个函数:
mydata <- data.table(mydata)
mydata[, lapply(.SD, mean), .SDcols = c("cmass", "gmass"), by = "crab"]
假设您想要获得 cmass
和 gmass
的平均值。
对于你问题的另一部分,我不太确定。您可以尝试只在您感兴趣的列上设置一个键,然后调用 unique
:
setkey(mydata, crab)
unique(mydata)
然后它将按 crab
排序,unique
将删除具有重复值 crab
的行。那是你想要的吗?
不清楚预期的输出是什么
library(dplyr)
df1 %>%
group_by(species, crab, treatment, gill, months) %>%
summarise_each(funs(mean=mean(., na.rm=TRUE)))
或者可能是
df1 %>%
group_by(crab) %>%
slice(1)