我有一个有50列和16000行的地球化学数据集。我需要在由Field_Notes
分组的Sample_ID
列中的行中连接数据。我已经尝试使用聚合函数,但最终只有这两列的子集和重复删除。如果有人有任何建议,我将非常感激。
我的数据如下:
Sampe_ID Year Alt_Min Field_Notes X
1 97PQQT007 1997 Fe-Carb qtz sweel 2
2 97PQQT007 1997 Fe-Carb v. tr 2
3 97PQQT014 1997 <NA> qtz vn in bslt 15
4 97PQQT014 1997 <NA> 1-2% py,cpy 15
5 97PQQT006 1997 Fe-Carb qtz vn 2
6 97PQQT004 1997 Fe-Carb qtz vn 1
7 97PQQT004 1997 Fe-Carb none 1
但应该是这样的:
Sampe_ID Year Alt_Min Field_Notes X
1 97PQQT007 1997 Fe-Carb qtz sweel, v. tr 2
2 97PQQT007 1997 Fe-Carb qtz sweel, v. tr 2
3 97PQQT014 1997 <NA> qtz vn in bslt, 1-2% py,cpy 15
4 97PQQT014 1997 <NA> qtz vn in bslt, 1-2% py,cpy 15
5 97PQQT006 1997 Fe-Carb qtz vn 2
6 97PQQT004 1997 Fe-Carb qtz vn, none 1
7 97PQQT004 1997 Fe-Carb qtz vn, none 1
这是一个可重现的数据框:
geochem <- data.frame(Sample_ID= c(1,1,2,2,3,4,4), Year = rep(1997, 7), Alt_Min = c(rep("Fe-Carb",2), rep(NA,2), rep("Fe-Carb",3)), Field_Notes = c("qtz sweel", "v. tr", "qtz vn in bslt", "1-2% py,cpy", "qtz vn", "qtz vn", "none"), x = c(2,2,15,15,2,1,1))
答案 0 :(得分:2)
您可以使用within
和ave
的组合来转换数据框。
within(geochem,
{Field_Notes <- as.character(Field_Notes);
Field_Notes <- ave(Field_Notes, Sample_ID, FUN = toString)})
函数toString
用于将字符串粘贴在一起。
请注意,因子Field_Notes
将转换为字符串变量。
结果:
Sample_ID Year Alt_Min Field_Notes x
1 1 1997 Fe-Carb qtz sweel, v. tr 2
2 1 1997 Fe-Carb qtz sweel, v. tr 2
3 2 1997 <NA> qtz vn in bslt, 1-2% py,cpy 15
4 2 1997 <NA> qtz vn in bslt, 1-2% py,cpy 15
5 3 1997 Fe-Carb qtz vn 2
6 4 1997 Fe-Carb qtz vn, none 1
7 4 1997 Fe-Carb qtz vn, none 1
答案 1 :(得分:0)
如果没有可重复的数据框,我无法确定这是否有效,但应该如此。在此处使用dplyr
并将df
替换为您的数据框名称。
library(dplyr)
geochem <- data.frame(Sample_ID= c(1,1,2,2,3,4,4),
Year = rep(1997, 7), Alt_Min = c(rep("Fe-Carb",2), rep(NA,2), rep("Fe-Carb",3)),
Field_Notes = c("qtz sweel", "v. tr", "qtz vn in bslt",
"1-2% py,cpy", "qtz vn", "qtz vn", "none"),
x = c(2,2,15,15,2,1,1))
geochem %>% group_by(x,Sample_ID) %>% summarise(Field_Notes=paste(Field_Notes, collapse=","))
以下是我得到的确切输出:
x Sample_ID Field_Notes
<dbl> <dbl> <chr>
1 4 qtz vn,none
2 1 qtz sweel,v. tr
2 3 qtz vn
15 2 qtz vn in bslt,1-2% py,cpy