我的问题是,我无法用语言解决问题,因此很难谷歌,所以我不得不问你。我希望你能解释我的问题:
我有一个像这样的data.frame:
6 4
5 2
3 6
0 7
0 2
1 3
6 0
1 1
正如您所注意到的,在第一列中我0
重复两次,1
两次,所以一次。我想要做的是在第二列(在此示例中为0
和7
)中获取一个数字的所有相应值,例如2
。最好在data.frame
。
我知道df$V2[which(df$V1==0)]
的尝试,但是由于第一列可能超过100行,我无法真正使用它。你们有一个很好的解决方案吗?
也许有关于这个问题背景的一些话:我需要处理这些数据,即得到第一列中所有0
的第二列的平均值,或得到最小值/最大值值。
此致
答案 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中,对于同一任务,您可能会使用by
或aggregate
(或split
和sapply
来获得更高级用法)。例如,要计算组均值,您可以
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
结果向量。