我已将数据帧分组(在我的情况下,三个数据帧分组在一起)。我想根据一列中的值找到所有三个数据框之间的交点。
我一直在使用dplyr相交函数,但是看不到如何将其用于分组的数据帧。我想在所有三个数据框中找到具有相同Start.Coord值的所有行。
这是一次失败的尝试,并显示了错误消息:
SameWithinTreatment <= SorbitolGroup %>% group_by(Sample) %>% intersect(Start.Coord)
Error in intersect_data_frame(x, y) : object 'Start.Coord' not found
很显然,我需要另一个参数来赋予intersect()。我看到intersect()似乎不是我需要的功能,但似乎必须有一种方法可以完成我需要的工作。
我已经做了很多搜索,但是我发现的所有内容仅适用于2个数据帧。
这是我分组数据框中的一些示例数据。在这三个之间有一个具有相同Start.Coord值的行:以8805作为Start.Coord的行。
Start.Coord Stop.Coord Sample Coverage normalized.coverage Average.Normalized.Covera~ SD.of.Normalized.Covera~ TwoSD
<int> <int> <chr> <int> <dbl> <dbl> <dbl> <dbl>
1 1019 1023 X1.combined 19 18 9.91 3.98 7.95
2 1510 1514 X1.combined 19 18 9.91 3.98 7.95
3 1514 1518 X1.combined 19 18 9.91 3.98 7.95
4 1520 1524 X1.combined 19 18 9.91 3.98 7.95
5 8805 8809 X1.combined 19 18 9.91 3.98 7.95
6 48185 48189 X1.combined 19 18 9.91 3.98 7.95
Start.Coord Stop.Coord Sample Coverage normalized.coverage Average.Normalized.Coverage SD.of.Normalized.Coverage TwoSD
<int> <int> <chr> <int> <dbl> <dbl> <dbl> <dbl>
1 8805 8809 X2 167 166 122. 21.7 43.4
2 11874 11878 X2 169 168 122. 21.7 43.4
3 12042 12046 X2 169 168 122. 21.7 43.4
4 18321 18325 X2 175 174 122. 21.7 43.4
5 25187 25191 X2 167 166 122. 21.7 43.4
6 25308 25312 X2 194 193 122. 21.7 43.4
Start.Coord Stop.Coord Sample Coverage normalized.coverage Average.Normalized.Coverage SD.of.Normalized.Coverage TwoSD
<int> <int> <chr> <int> <dbl> <dbl> <dbl> <dbl>
1 8805 8809 X3 132 131 94.4 16.7 33.5
2 10340 10344 X3 135 134 94.4 16.7 33.5
3 11874 11878 X3 141 140 94.4 16.7 33.5
4 12042 12046 X3 137 136 94.4 16.7 33.5
5 18209 18213 X3 133 132 94.4 16.7 33.5
6 18218 18222 X3 143 142 94.4 16.7 33.5
所以我想找回一个看起来像这样的新数据框:
Start.Coord Stop.Coord Sample Coverage normalized.coverage Average.Normalized.Coverage SD.of.Normalized.Coverage TwoSD
8805 8809 X1.combined 19 18 9.91 3.98 7.95
8805 8809 X2 167 166 122. 21.7 43.4
8805 8809 X3 132 131 94.4 16.7 33.5
有没有办法做到这一点?
答案 0 :(得分:0)
如果您的3个数据框具有相同的列名,请使用rbind
进行合并
SorbitolGroup<- rbind(df1,df2,df3)
然后加
Start.Coord
至group_by
:
SorbitolGroup %>% group_by(Sample,Start.Coord)
如果您要计算两组的观测值
SorbitolGroup %>% group_by(Sample,Start.Coord) %>% tally()
答案 1 :(得分:0)
除了@ W148SMH建议之外,听起来您还需要使用filter()
。
a <- data.frame(sample='a',value=sample(1:10,10,T))
b <- data.frame(sample='b',value=sample(1:10,10,T))
c <- data.frame(sample='c',value=sample(1:10,10,T))
df <- rbind(a,b,c)
summary(df)
df %>% filter(value==9)
df_new <- df %>% filter(value==9) # new data frame including all cases with value==9
df %>% count(sample,value)
df %>% group_by(sample,value) %>%
summarise(...) # to summarise other variables at each level of sample and value