从data.frame获取相应的值
我的问题是,我无法用文字表达我的问题,这使得谷歌很难找到它,所以我不得不问你。我希望你能阐明我的问题: 我得到了这样一个数据帧:从data.frame获取相应的值,r,dataframe,R,Dataframe,我的问题是,我无法用文字表达我的问题,这使得谷歌很难找到它,所以我不得不问你。我希望你能阐明我的问题: 我得到了这样一个数据帧: 6 4 5 2 3 6 0 7 0 2 1 3 6 0 1 1 正如您所注意到的,在第一列中,我得到了重复两次的0,1两次,如此类推。我想做的是在第二列(本例中为7和2)中获取一个数字的所有对应值,比如0。最好是在data.frame中 我知道尝试使用df$V2[which(df$V1==0)],但是由于第一列可能有100多行,我不能真正使用它。你们有好办法吗 关于
6 4
5 2
3 6
0 7
0 2
1 3
6 0
1 1
正如您所注意到的,在第一列中,我得到了重复两次的0
,1
两次,如此类推。我想做的是在第二列(本例中为7
和2
)中获取一个数字的所有对应值,比如0
。最好是在data.frame
中
我知道尝试使用df$V2[which(df$V1==0)]
,但是由于第一列可能有100多行,我不能真正使用它。你们有好办法吗
关于这个问题的背景,我需要处理这些数据,即获取第一列中所有0
的第二列平均值,或者获取最小/最大值
这里使用
dplyr
df %>% group_by(V1) %>% summarize(ME=mean(V2))
这里有一个使用dplyr的解决方案
df %>% group_by(V1) %>% summarize(ME=mean(V2))
首先,你建议的解决方案到底有什么问题?这是效率问题吗?坦率地说,您提供的代码接近最优[1]
对于一般情况,您可能会看到一个拆分-应用-组合操作,根据某种差异将函数应用于数据子集。正如@teucer所指出的,dplyr
(以及它的祖先,plyr
)正是为此而设计的,就像数据表一样。在vanilla R中,您倾向于使用by
或aggregate
(或split
和sapply
进行更高级的使用)来完成相同的任务。例如,要计算组的意思,您可以
by(df$V2, df$V1, mean)
或
甚至
sapply(split(df$V2, df$V1), mean)
[1] 代码可以简化为df$V2[df$V1==0]
或df[df$V1==0,]
。首先,您建议的解决方案到底有什么问题?这是效率问题吗?坦率地说,您提供的代码接近最优[1]
对于一般情况,您可能会看到一个拆分-应用-组合操作,根据某种差异将函数应用于数据子集。正如@teucer所指出的,dplyr
(以及它的祖先,plyr
)正是为此而设计的,就像数据表一样。在vanilla R中,您倾向于使用by
或aggregate
(或split
和sapply
进行更高级的使用)来完成相同的任务。例如,要计算组的意思,您可以
by(df$V2, df$V1, mean)
或
甚至
sapply(split(df$V2, df$V1), mean)
[1] 代码可以简化为df$V2[df$V1==0]
或df[df$V1==0,]
。使用您的数据(附带一些临时名称)
(例如:
)或者使用默认接口
aggregate(Var2 ~ Var1, data = df, mean)
aggregate(Var2 ~ Var1, data = df, max)
aggregate(Var2 ~ Var1, data = df, min)
with(df, aggregate(Var2, list(Var1), FUN = mean))
> with(df, aggregate(Var2, list(Var1), FUN = mean))
Group.1 x
1 0 4.5
2 1 2.0
3 3 6.0
4 5 2.0
5 6 2.0
但是公式界面的输出更好。使用您的数据(附带一些临时名称)
(例如:
)或者使用默认接口
aggregate(Var2 ~ Var1, data = df, mean)
aggregate(Var2 ~ Var1, data = df, max)
aggregate(Var2 ~ Var1, data = df, min)
with(df, aggregate(Var2, list(Var1), FUN = mean))
> with(df, aggregate(Var2, list(Var1), FUN = mean))
Group.1 x
1 0 4.5
2 1 2.0
3 3 6.0
4 5 2.0
5 6 2.0
但是公式界面的输出更好。谢谢大家的回复。我决定采用teucer和eipi10发布的dplyr
解决方案。由于我有第三列(甚至第四列),这个解决方案似乎很容易使用(只需将V3
添加到groupby
)
因为有些人问df$V2[哪个(df$V1==0)]有什么问题:我说“行”的时候可能有点不清楚,我的意思是“值”吗。假设我在第一列中有n
不同的值,我必须对所有不同的值使用n
次命令,并存储n
结果向量。谢谢大家的回复。我决定采用teucer和eipi10发布的dplyr
解决方案。由于我有第三列(甚至第四列),这个解决方案似乎很容易使用(只需将V3
添加到groupby
)
因为有些人问df$V2[哪个(df$V1==0)]有什么问题:我说“行”的时候可能有点不清楚,我的意思是“值”吗。让我们假设我在第一列中有n
不同的值,我必须对所有不同的值使用n
次命令,并存储n
结果向量。使用数据。table
library(data.table)
setDT(df)[, list(mean=mean(V2), max= max(V2), min=min(V2)), by = V1]
使用数据表
library(data.table)
setDT(df)[, list(mean=mean(V2), max= max(V2), min=min(V2)), by = V1]
库(dplyr);df%>%groupby(V1)%>%summary(mean=mean(V2)、max=max(V2)、min=min(V2))
将为您提供与V1
的每个值相对应的V2
中的值的平均值、最小值和最大值。为什么您不能将函数用于此?库(dplyr);df%>%groupby(V1)%>%summary(mean=mean(V2)、max=max(V2)、min=min(V2))
将为您提供与V1
的每个值对应的V2
中的值的平均值、最小值和最大值。您为什么不能使用此函数呢?感谢您的快速操作和关于dplyr
软件包的提示!我不知道这个非常强大的软件包。像施了魔法一样解决了我的问题。谢谢感谢您对dplyr
软件包的快速提示!我不知道这个非常强大的软件包。像施了魔法一样解决了我的问题。谢谢