R 如何创建一个新列,显示是否以及有多少变量共享一个特定观测值
我有一个关于R.中一些生物信息学数据分析的问题 我的测试数据框架由一个变量“序列”和三个不同的变量组成,变量“序列”具有不同的字母代码作为观察值,三个不同的变量代表个体/样本(P1、P2、P3),表示个体中特定观察值的计数频率(例如,P3包含序列“AB”23次)。 我现在想创建一个新列(在我的数据框中已经指示为带NA的伪列X),显示每个序列行的序列是否在个体(P1、P2、P3)之间总体共享,更重要的是,三个个体中有多少人共享它。因此,新列中的数字只能介于1到3之间。例如:对于序列“ABCDE”,新列将显示值1,因为它只出现在一个单独的P3中;对于序列“ABC”,新列将显示值2,因为它同时出现在P2和P3中;最后对于“ABCD”,它将显示3,因为所有的个体都包含该序列 在dput()之后,我的测试数据如下所示: 谢谢大家! 您可以尝试将“p”列与正计数相加:R 如何创建一个新列,显示是否以及有多少变量共享一个特定观测值,r,bioinformatics,R,Bioinformatics,我有一个关于R.中一些生物信息学数据分析的问题 我的测试数据框架由一个变量“序列”和三个不同的变量组成,变量“序列”具有不同的字母代码作为观察值,三个不同的变量代表个体/样本(P1、P2、P3),表示个体中特定观察值的计数频率(例如,P3包含序列“AB”23次)。 我现在想创建一个新列(在我的数据框中已经指示为带NA的伪列X),显示每个序列行的序列是否在个体(P1、P2、P3)之间总体共享,更重要的是,三个个体中有多少人共享它。因此,新列中的数字只能介于1到3之间。例如:对于序列“ABCDE”,
mydf$X <- rowSums(mydf[, grep("^P", names(mydf))]>0)
head(mydf, 4)
# Sequence P1 P2 P3 X
#1 AB 5 6 23 3
#2 ABC 0 2 34 2
#3 ABCD 20 3 8 3
#4 ABCDE 0 0 5 1
mydf$X 0)
负责人(多年筹资框架,4)
#序列p1p2p3x
#1 AB 5 6 23 3
#2 ABC 02 34 2
#3 ABCD 20 3 8 3
#4 ABCDE 0 0 5 1
我们可以使用Reduce
和lappy
df1$X <- Reduce(`+`, lapply(df1[2:4], `>`, 0))
df1$X
#[1] 3 2 3 1 2 2 1 2 2
df1$X`,0))
df1$X
#[1] 3 2 3 1 2 2 1 2 2
Reduce
可以非常高效,如基准测试所示
df1$X <- Reduce(`+`, lapply(df1[2:4], `>`, 0))
df1$X
#[1] 3 2 3 1 2 2 1 2 2