折叠唯一行但在 R 中保留一个变量
Collapsing unique rows but retaining a variable in R
我对 R 比较陌生,不知道如何表达我的问题。基本上,我有一个数据框 test
看起来像:
PMID PL subject
1 Canada neurology
2 USA cancer
5 Canada dermatology
2 USA respiratory
4 Japan neurology
2 USA cancer
5 Canada cardiovascular
我想转换成
PMID PL subject
1 Canada neurology
2 USA cancer, respiratory
5 Canada dermatology, cardiovascular
4 Japan neurology
本质上,每个 PMID 都可以关联到多个主题,因此我想保留该信息。我只想要唯一的 PMID 行。但是,我也确实想要删除重复出现的事件(例如,有 3 行“2”,但其中 2 行是 "cancer." 此外,我还有其他变量,并且每个 PMID 的每个值都相同其他变量(主题除外)。
请指教
谢谢!
尝试使用 dplyr
dat%>%group_by(PMID)%>%dplyr::summarise(subject=toString(unique(subject)))
# A tibble: 4 x 2
PMID subject
<int> <chr>
1 1 neurology
2 2 cancer, respiratory
3 4 neurology
4 5 dermatology, cardiovascular
第二种方法
dat1=dat[!duplicated((dat)),]
aggregate(dat1$subject, list(dat1$PMID), paste, collapse=",")
EDIT1 :根据您更新的 data.frame
,您应该使用 mutate
dat%>%group_by(PMID)%>%dplyr::mutate(subject=toString(unique(subject)))%>% distinct(PMID, .keep_all = TRUE)
# Groups: PMID [4]
PMID PL subject
<int> <chr> <chr>
1 1 Canada neurology
2 2 USA cancer, respiratory
3 5 Canada dermatology, cardiovascular
4 4 Japan neurology
这是另一个选项 data.table
library(data.table)
unique(setDT(df1))[, .(subject = toString(subject)), by = PMID]
# PMID subject
#1: 1 neurology
#2: 2 cancer, respiratory
#3: 5 dermatology, cardiovascular
#4: 4 neurology
我对 R 比较陌生,不知道如何表达我的问题。基本上,我有一个数据框 test
看起来像:
PMID PL subject
1 Canada neurology
2 USA cancer
5 Canada dermatology
2 USA respiratory
4 Japan neurology
2 USA cancer
5 Canada cardiovascular
我想转换成
PMID PL subject
1 Canada neurology
2 USA cancer, respiratory
5 Canada dermatology, cardiovascular
4 Japan neurology
本质上,每个 PMID 都可以关联到多个主题,因此我想保留该信息。我只想要唯一的 PMID 行。但是,我也确实想要删除重复出现的事件(例如,有 3 行“2”,但其中 2 行是 "cancer." 此外,我还有其他变量,并且每个 PMID 的每个值都相同其他变量(主题除外)。
请指教
谢谢!
尝试使用 dplyr
dat%>%group_by(PMID)%>%dplyr::summarise(subject=toString(unique(subject)))
# A tibble: 4 x 2
PMID subject
<int> <chr>
1 1 neurology
2 2 cancer, respiratory
3 4 neurology
4 5 dermatology, cardiovascular
第二种方法
dat1=dat[!duplicated((dat)),]
aggregate(dat1$subject, list(dat1$PMID), paste, collapse=",")
EDIT1 :根据您更新的 data.frame
,您应该使用 mutate
dat%>%group_by(PMID)%>%dplyr::mutate(subject=toString(unique(subject)))%>% distinct(PMID, .keep_all = TRUE)
# Groups: PMID [4]
PMID PL subject
<int> <chr> <chr>
1 1 Canada neurology
2 2 USA cancer, respiratory
3 5 Canada dermatology, cardiovascular
4 4 Japan neurology
这是另一个选项 data.table
library(data.table)
unique(setDT(df1))[, .(subject = toString(subject)), by = PMID]
# PMID subject
#1: 1 neurology
#2: 2 cancer, respiratory
#3: 5 dermatology, cardiovascular
#4: 4 neurology