从data.frame获取相应的值

时间:2015-06-30 20:48:47

标签: r dataframe

我的问题是,我无法用语言解决问题,因此很难谷歌,所以我不得不问你。我希望你能解释我的问题:

我有一个像这样的data.frame:

6 4
5 2
3 6
0 7
0 2
1 3
6 0
1 1

正如您所注意到的,在第一列中我0重复两次,1两次,所以一次。我想要做的是在第二列(在此示例中为07)中获取一个数字的所有相应值,例如2。最好在data.frame

我知道df$V2[which(df$V1==0)]的尝试,但是由于第一列可能超过100行,我无法真正使用它。你们有一个很好的解决方案吗?

也许有关于这个问题背景的一些话:我需要处理这些数据,即得到第一列中所有0的第二列的平均值,或得到最小值/最大值值。

此致

5 个答案:

答案 0 :(得分:2)

这是使用dplyr

的解决方案
df %>% group_by(V1) %>% summarize(ME=mean(V2))

答案 1 :(得分:1)

使用您的数据(附上一些临时名称)

func tappedTextView(tapGesture: UIGestureRecognizer) {
        guard let textView = tapGesture.view as? UITextView else { return }
        guard let position = textView.closestPosition(to: tapGesture.location(in: textView)) else { return }
        if let url = textView.textStyling(at: position, in: .forward)?[NSLinkAttributeName] as? URL {
            UIApplication.shared.open(url)
        }
    }

强迫第一列成为一个因素

txt <- "6 4
5 2
3 6
0 7
0 2
1 3
6 0
1 1"
df <- read.table(text = txt)
names(df) <- paste0("Var", seq_len(ncol(df)))

然后你可以使用df <- transform(df, Var1 = factor(Var1)) 一个漂亮的公式界面

aggregate()

(例如:

aggregate(Var2 ~ Var1, data = df, mean)
aggregate(Var2 ~ Var1, data = df, max)
aggregate(Var2 ~ Var1, data = df, min)

)或使用默认界面

> aggregate(Var2 ~ Var1, data = df, mean)
  Var1 Var2
1    0  4.5
2    1  2.0
3    3  6.0
4    5  2.0
5    6  2.0

但是公式界面的输出更好。

答案 2 :(得分:1)

使用data.table

library(data.table)
setDT(df)[, list(mean=mean(V2), max= max(V2), min=min(V2)), by = V1]

答案 3 :(得分:0)

首先,您建议的解决方案究竟是什么问题?这是效率问题吗?坦率地说,你提出的代码接近最优[1]。

对于一般情况,您可能正在查看split-apply-combine操作,以根据某些区分符将函数应用于数据的子集。正如@teucer所指出的那样,dplyr(它的祖先,plyr)就是为data.tables而设计的。在vanilla R中,对于同一任务,您可能会使用byaggregate(或splitsapply来获得更高级用法)。例如,要计算组均值,您可以

by(df$V2, df$V1, mean)

aggregate(df, list(type=df$V1), mean)

甚至

sapply(split(df$V2, df$V1), mean)

[1]代码也可简化为df$V2[df$V1 == 0]df[df$V1 == 0,]

答案 4 :(得分:0)

感谢大家的回复。我决定选择teucer和eipi10发布的dplyr解决方案。由于我有第三列(甚至可能是第四列),这个解决方案似乎很容易使用(只需将V3添加到group_by)。

因为有人在问df$V2[which(df$V1==0)]有什么问题:我说'&#34;行&#34;时可能有点不清楚,我实际上是指&#34;值&#34; 。假设我在第一列中有n个不同的值,我必须对所有不同的值使用n次命令并存储n结果向量。