创建一个新列,作为R组内的价值共识
你好,我有一个数据帧,比如创建一个新列,作为R组内的价值共识,r,dplyr,R,Dplyr,你好,我有一个数据帧,比如 Groups COL1 G1 Unknown_RNA G1 Unknown_RNA G1 A G1 A G1 Unknown_RNA G2 B G2 A G2 B G3 Unknown_RNA G3 A G4 Unknown_RNA G4 Unknown_RNA G4 Unknown_RN
Groups COL1
G1 Unknown_RNA
G1 Unknown_RNA
G1 A
G1 A
G1 Unknown_RNA
G2 B
G2 A
G2 B
G3 Unknown_RNA
G3 A
G4 Unknown_RNA
G4 Unknown_RNA
G4 Unknown_RNA
然后我应该在df$COL1
中保留最具代表性的值,并将其放在consenseus\u COL1
列中,而不考虑值Unknown\u RNA
(组中只有该值时除外)
在这里我应该得到:
Groups COL1 consensus_COL1
G1 Unknown_RNA A
G1 Unknown_RNA A
G1 A A
G1 A A
G1 Unknown_RNA A
G2 B B
G2 A B
G2 B B
G3 Unknown_RNA A
G3 A A
G4 Unknown_RNA Unknown_RNA
G4 Unknown_RNA Unknown_RNA
G4 Unknown_RNA Unknown_RNA
到目前为止,我只知道如何保持最具代表性的价值:
df %>% filter(COL1 != "") %>%
group_by(Groups) %>%
add_count(COL1) %>%
top_n(1, n) %>%
distinct(consensus_COL1 = COL1) %>%
right_join(df)
但我不知道如何添加Unknown\u RNA
问题
这是数据
structure(list(Groups = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 3L, 3L, 4L, 4L, 4L), .Label = c("G1", "G2", "G3", "G4"), class = "factor"),
COL1 = structure(c(3L, 3L, 1L, 1L, 3L, 2L, 1L, 2L, 3L, 1L,
3L, 3L, 3L), .Label = c("A", "B", "Unknown_RNA"), class = "factor")), class = "data.frame", row.names = c(NA,
-13L))
一种简单的方法是在获得计数后过滤掉
Unknown\u RNA
,然后left\u用原始数据框加入该数据,并用Unknown\u RNA
库(tidyverse)
df%
as_tible()%>%
分组依据(组)%>%
计数(COL1)%>%
过滤器(COL1!=“未知RNA”)%>%
前n(1,n)%>%
选择(-n)->tb\u df
tb_df
#>#tibble:3 x 2
#>#组:组[3]
#>组COL1
#>
#>1 G1 A
#>2 G2 B
#>3 G3 A
df%>%
选择(-2)%>%
左联合(tb\U df)%>%
突变(COL1=COL1%>%替换RNA(“未知RNA”))%>%
重命名(一致性_COL1=COL1)%>%
突变(COL1=df$COL1)
#>加入,由=“组”
#>团体共识(COL1 COL1)
#>1 G1一个未知的核糖核酸
#>2 G1未知的核糖核酸
#>3 G1A
#>4 G1A
#>5 G1未知的核糖核酸
#>6g2b
#>7 G2 B A
#>8 G2 B
#>9 G3未知的RNA
#>10 G3A
#>11 G4未知核糖核酸未知核糖核酸
#>12 G4未知核糖核酸未知核糖核酸
#>13 G4未知核糖核酸未知核糖核酸
由(v0.3.0)于2021年1月29日创建,我们可以在单个管道中进行此操作,方法是将对应于“未知”RNA的“n”值替换为NA
library(dplyr)
library(tibble)
df1 %>%
add_count(Groups, COL1) %>%
mutate(n = replace(n, COL1 == 'Unknown_RNA', NA)) %>%
group_by(Groups) %>%
mutate(consensus_COL1 = if(all(is.na(n))) 'Unknown_RNA' else COL1[which.max(n)])
# A tibble: 13 x 4
# Groups: Groups [4]
# Groups COL1 n consensus_COL1
# <fct> <fct> <int> <chr>
# 1 G1 Unknown_RNA NA A
# 2 G1 Unknown_RNA NA A
# 3 G1 A 2 A
# 4 G1 A 2 A
# 5 G1 Unknown_RNA NA A
# 6 G2 B 2 B
# 7 G2 A 1 B
# 8 G2 B 2 B
# 9 G3 Unknown_RNA NA A
#10 G3 A 1 A
#11 G4 Unknown_RNA NA Unknown_RNA
#12 G4 Unknown_RNA NA Unknown_RNA
#13 G4 Unknown_RNA NA Unknown_RNA
库(dplyr)
图书馆(tibble)
df1%>%
添加计数(组,列1)%>%
突变(n=replace(n,COL1=='Unknown_RNA',NA))%>%
分组依据(组)%>%
突变(一致性_COL1=if(all(is.na(n)))'Unknown_RNA'else COL1[which.max(n)])
#一个tibble:13x4
#分组:分组[4]
#组COL1 n共识_COL1
#
#1 G1未知的核糖核酸A
#2 G1未知核糖核酸A
#3 G1 A 2 A
#4 G1 A 2 A
#5 G1未知核糖核酸A
#6G2B2B
#7 G2 A 1 B
#8G2B2B
#9 G3未知核糖核酸A
#10 G3 A 1 A
#11 G4未知核糖核酸未知核糖核酸
#12 G4未知核糖核酸未知核糖核酸
#13 G4未知核糖核酸未知核糖核酸
非常感谢您的帮助和时间,如果我不想添加另一个异常,例如未知\u DNA
,我可以在%c('Unknown\u RNA','Unknown\u DNA')中使用类似%的东西吗?
在替换中,您可以转换为使用列%c(…)
要转换为NAthanks以获得您的帮助,它就像一个charme